How to determine hex address for srpt acls,
/sys/class/infiniband/mlx4_0/ports/1/gids/0 isn't it
by james harvey
I'm at a loss on how to get the hex address to go underneath acls when setting up srpt. If I use the fe80 prefix I see everywhere including /sys, it gets rejected. If I use the prefix shown in the kernel rejection method, which I can't find anywhere else, it works fine.
targetcli configuration:
/> ls
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 3]
| | o- kvm1 .................................................................... [/dev/disk1/kvm1 (100.0GiB) write-thru activated]
| | o- kvm2 .................................................................... [/dev/disk2/kvm2 (100.0GiB) write-thru activated]
| | o- kvm3 .................................................................... [/dev/disk3/kvm3 (100.0GiB) write-thru activated]
| o- fileio ................................................................................................. [Storage Objects: 0]
| o- pscsi .................................................................................................. [Storage Objects: 0]
| o- ramdisk ................................................................................................ [Storage Objects: 0]
o- iscsi ............................................................................................................ [Targets: 0]
o- loopback ......................................................................................................... [Targets: 0]
o- sbp .............................................................................................................. [Targets: 0]
o- srpt ............................................................................................................. [Targets: 1]
| o- ib.fe800000000000000002c90300001679 ........................................................................... [no-gen-acls]
| o- acls ............................................................................................................ [ACLs: 1]
| | o- ib.fe800000000000000002c90300001e79 .................................................................... [Mapped LUNs: 3]
| | o- mapped_lun0 .................................................................................... [lun0 block/kvm1 (rw)]
| | o- mapped_lun1 .................................................................................... [lun1 block/kvm2 (rw)]
| | o- mapped_lun2 .................................................................................... [lun2 block/kvm3 (rw)]
| o- luns ............................................................................................................ [LUNs: 3]
| o- lun0 ..................................................................................... [block/kvm1 (/dev/disk1/kvm1)]
| o- lun1 ..................................................................................... [block/kvm2 (/dev/disk2/kvm2)]
| o- lun2 ..................................................................................... [block/kvm3 (/dev/disk3/kvm3)]
o- vhost ............................................................................................................ [Targets: 0]
o- xen_pvscsi ....................................................................................................... [Targets: 0]
NOTE my InfiniBand cards have similar IDs, and only differ by one character -- compare the end, 1679 vs 1e79.
On the target (host):
$ cat /sys/class/infiniband/mlx4_0/ports/1/gids/0
fe80:0000:0000:0000:0002:c903:0000:1679
{It's my understanding this should be used underneath srpt, as the wwn}
On the initiator (client):
$ cat /sys/class/infiniband/mlx4_0/ports/1/gids/0
fe80:0000:0000:0000:0002:c903:0000:1e79
{It's my understanding this should be used underneath acls, and mapped with the luns}
# ibsrpdm -c
id_ext=0002c90300001678,ioc_guid=0002c90300001678,dgid=fe800000000000000002c90300001679,pkey=ffff,service_id=0002c90300001678
{so, its /etc/srp_daemon.conf is just comments and the line}
a id_ext=0002c90300001678,ioc_guid=0002c90300001678,dgid=fe800000000000000002c90300001679,pkey=ffff,service_id=0002c90300001678
But, after starting service target on the target, and service srpdaemon on the initiator, dmesg on target shows:
[ 849.710278] ib_srpt Received SRP_LOGIN_REQ with i_port_id 0x7916000003c90200:0x2c90300001e79, t_port_id 0x2c90300001678:0x2c90300001678 and it_iu_len 260 on port 1 (guid=0xfe80000000000000:0x2c90300001679)
[ 849.714528] ib_srpt Session : kernel thread ib_srpt_compl (PID 24481) started
[ 849.714601] ib_srpt Rejected login because no ACL has been configured yet for initiator 0x7916000003c902000002c90300001e79.
[ 849.714613] ib_srpt Session 0x7916000003c902000002c90300001e79: kernel thread ib_srpt_compl (PID 24481) stopped
And, dmesg on initiator shows:
[ 976.616221] scsi host11: ib_srp: REJ received
[ 976.616229] scsi host11: ib_srp: SRP LOGIN from fe80:0000:0000:0000:0002:c903:0000:1e79 to fe80:0000:0000:0000:0002:c903:0000:1679 REJECTED, reason 0x00010001
[ 976.616269] scsi host11: ib_srp: Connection 0/4 failed
[ 976.616276] scsi host11: ib_srp: Sending CM DREQ failed
Why is the target machine, in the srp context only, seeing the ports as starting with 0x7916000003c90200 and 0x2c90300001678, and the client machine seeing the ports as starting with fe80:0000:0000:0000? What are these 0x7916... and 0x2c90... prefixes, and how can I find them besides getting a rejection and looking at the kernel logs? I haven't seen these prefixes anywhere else on either system.
In targetcli, if I use acls with 0x7916000003c902000002c90300001e79, then everything works great.
7 years, 1 month
does rtslib-fb have memory leak
by Shuo Donf
version of rtslib-fb is 2.1.58
It seems that when I have a new BlockStorageObject created, it has memory leak.
code:
def create_block_storage(name, dev):
if not name or not dev:
return -1
rv = 0
disk = get_block_storage(name)
if disk is not None:
return 99
try:
disk = BlockStorageObject(name, dev)
except:
rv = 2
return rv
def delete_block_storage(name):
if not name:
return -1
disk = get_block_storage(name)
if disk is None:
return 99
disk.delete()
return 0
def get_block_storage(name):
if not name:
return None
disk = None
try:
disk = BlockStorageObject(name)
except:
disk = None
return disk
def memory_usage_psutil():
# return the memory usage in MB
import psutil
process = psutil.Process(os.getpid())
mem = process.get_memory_info()[1]
return mem
iqn = "iqn.2000-01.org.iders:target1"
name = "bs1"
dev = "/dev/sdb"
ip = "0.0.0.0";
tag = 1
port = 3333
auth = 0
port2 = 4444
auth2 = 1
rv = 0
while True:
rv = 0;
rv += create_block_storage(name, dev)
rv += create_iscsi_target(iqn)
rv += create_target_tpg(iqn, tag, ip, port, auth, "", "")
rv += set_target_tpg_ip_port(iqn, tag, ip, port2);
rv += set_target_tpg_authentication(iqn, tag, auth2, "dong", "1234")
rv += add_lun_in_tpg(iqn, tag, name)
rv += remove_lun_from_tpg(iqn, tag, name)
rv += delete_target_tpg(iqn, tag)
rv += delete_iscsi_target(iqn)
rv += delete_block_storage(name)
print "rv:",rv
print "vms:",memory_usage_psutil()
time.sleep(1)
the "vms" get increased.
if I comment out "rv += delete_block_storage(name)", it won't have memory leak(vms keeps in constant) because it only create a new "BlockStorageObject" once.
8 years, 3 months