Hi David,
hi All,
David, first of all thank you very much for your quick and helpful
answer, on the basis of which I have tried to understand what is
going on myself. Maybe it helps to recap:
If iscsi_lun_offline is called with lun_free==B_FALSE, it only
actually removes the LUN if ndi_devi_offline(ilp->lun_dip, 0)
succeeds, otherwise it only marks it down
(ISCSI_LUN_STATE_OFFLINE).
iscsi_lun_offline only attempts ndi_devi_offline(ilp->lun_dip,
NDI_DEVI_REMOVE) if (lun_free == B_TRUE), which is only the case when
being called from iscsi_lun_destroy.
iscsi_lun_destroy in turn is only being called from
iscsi_sess_destroy, which apparently is what we call when
reconfiguring iscsi nameservices (haven't traced this case).
So, if I have understood this corrently, LUNs will never be fully
removed for the devfsadm -C case on the basis of the current code, but
rather only be marked ISCSI_LUN_STATE_OFFLINE.
There might be a good reason for not removing offline LUNs from the
config for the standard case, but my understanding is that in the case
of devfsadm -C, we *do* want to remove offline LUNS.
I will spend a little more time on this and will keep you posted. Any
further help on this is greatly appreciated.
Nils
--
Some notes with more detail of the testcase:
## Add two LUNs
haggis:~# iscsiadm list target -S iqn.1992-08.com.netapp:sn.135019344
Target: iqn.1992-08.com.netapp:sn.135019344
Alias: moonglow
TPGT: 2000
ISID: 4000002a0000
Connections: 1
haggis:~# bg
[1]+ tail -f /var/adm/messages &
haggis:~# devfsadm
[...]
Jun 18 09:08:03 haggis scsi: [ID 799468 kern.notice] sd5 at iscsi0: name
0000iqn.1992-08.com.netapp%3Asn.13501934407D0,1, bus address
0000iqn.1992-08.com.netapp%3Asn.13501934407D0,1
Jun 18 09:08:03 haggis genunix: [ID 936769 kern.notice] sd5 is /iscsi/[EMAIL
PROTECTED],1
Jun 18 09:08:04 haggis genunix: [ID 408114 kern.notice] /iscsi/[EMAIL
PROTECTED],1 (sd5) online
Jun 18 09:08:04 haggis scsi: [ID 799468 kern.notice] sd6 at iscsi0: name
0000iqn.1992-08.com.netapp%3Asn.13501934407D0,2, bus address
0000iqn.1992-08.com.netapp%3Asn.13501934407D0,2
Jun 18 09:08:04 haggis genunix: [ID 936769 kern.notice] sd6 is /iscsi/[EMAIL
PROTECTED],2
Jun 18 09:08:04 haggis genunix: [ID 408114 kern.notice] /iscsi/[EMAIL
PROTECTED],2 (sd6) online
haggis:~# echo | format | ggrep -B 1 netapp
0. c1t5d0 <DEFAULT cyl 126 alt 2 hd 64 sec 32>
/iscsi/[EMAIL PROTECTED],1
1. c1t6d0 <DEFAULT cyl 126 alt 2 hd 64 sec 32>
/iscsi/[EMAIL PROTECTED],2
haggis:~# iscsiadm list target -S iqn.1992-08.com.netapp:sn.135019344
Target: iqn.1992-08.com.netapp:sn.135019344
Alias: moonglow
TPGT: 2000
ISID: 4000002a0000
Connections: 1
LUN: 2
Vendor: NETAPP
Product: LUN
OS Device Name: /dev/rdsk/c1t6d0s2
LUN: 1
Vendor: NETAPP
Product: LUN
OS Device Name: /dev/rdsk/c1t5d0s2
## Unmap one of them and run devfsadm -Cv
moonglow-phys1> lun unmap /vol/luns/slink2 slink
Wed Jun 18 09:15:15 CEST [moonglow-phys1: lun.map.unmap:info]: LUN
/vol/luns/slink2 unmapped from initiator group slink
haggis:~# devfsadm -Cv
haggis:~# (nothing removed)
# dtrace - amended with stack()
haggis:~# /var/tmp/trace_iscsi.s
dtrace: script '/var/tmp/trace_iscsi.s' matched 2 probes
CPU ID FUNCTION:NAME
0 64869 iscsi_lun_offline:entry iscsi_lun_offline - lun:2
iscsi`iscsi_sess_reportluns+0x2f6
iscsi`iscsi_sess_enumeration+0x2b
iscsi`iscsi_sess_state_logged_in+0x75
iscsi`iscsi_sess_state_machine+0x74
iscsi`iscsi_sess_online+0x69
iscsi`iscsid_login_tgt+0xe0
iscsi`iscsid_config_one+0x31
iscsi`iscsi_tran_bus_config+0x10c
scsi`scsi_hba_bus_config+0x5c
genunix`ndi_devi_config_one+0x98
genunix`resolve_pathname+0x160
genunix`e_ddi_hold_devi_by_path+0x20
genunix`dev_devices_cleanup+0xa3
devinfo`di_snapshot_and_clean+0x3b
devinfo`di_cache_update+0x38
devinfo`di_ioctl+0x472
genunix`cdev_ioctl+0x48
specfs`spec_ioctl+0x86
genunix`fop_ioctl+0x7b
genunix`ioctl+0x174
0 64870 iscsi_lun_offline:return iscsi_lun_offline - return:1
0 64869 iscsi_lun_offline:entry iscsi_lun_offline - lun:2
iscsi`iscsi_sess_reportluns+0x2f6
iscsi`iscsi_sess_enumeration+0x2b
iscsi`iscsi_sess_state_logged_in+0x75
iscsi`iscsi_sess_state_machine+0x74
iscsi`iscsi_sess_online+0x69
iscsi`iscsid_login_tgt+0xe0
iscsi`iscsid_config_one+0x31
iscsi`iscsi_tran_bus_config+0x10c
scsi`scsi_hba_bus_config+0x5c
genunix`ndi_devi_config_one+0x98
genunix`resolve_pathname+0x160
genunix`e_ddi_hold_devi_by_path+0x20
genunix`dev_devices_cleanup+0xa3
devinfo`di_snapshot_and_clean+0x3b
devinfo`di_cache_update+0x38
devinfo`di_ioctl+0x472
genunix`cdev_ioctl+0x48
specfs`spec_ioctl+0x86
genunix`fop_ioctl+0x7b
genunix`ioctl+0x174
0 64870 iscsi_lun_offline:return iscsi_lun_offline - return:1
1 64869 iscsi_lun_offline:entry iscsi_lun_offline - lun:2
iscsi`iscsi_sess_reportluns+0x2f6
iscsi`iscsi_sess_enumeration+0x2b
iscsi`iscsi_sess_state_logged_in+0x75
iscsi`iscsi_sess_state_machine+0x74
iscsi`iscsi_sess_online+0x69
iscsi`iscsid_login_tgt+0x1c8
iscsi`iscsid_config_all+0x5b
iscsi`iscsi_tran_bus_config+0x158
scsi`scsi_hba_bus_config+0x5c
genunix`devi_config_common+0x8d
genunix`mt_config_thread+0x51
unix`thread_start+0x8
1 64870 iscsi_lun_offline:return iscsi_lun_offline - return:1
1 64869 iscsi_lun_offline:entry iscsi_lun_offline - lun:2
iscsi`iscsi_sess_reportluns+0x2f6
iscsi`iscsi_sess_enumeration+0x2b
iscsi`iscsi_sess_state_logged_in+0x75
iscsi`iscsi_sess_state_machine+0x74
iscsi`iscsi_sess_online+0x69
iscsi`iscsid_login_tgt+0x1c8
iscsi`iscsid_config_all+0x5b
iscsi`iscsi_tran_bus_config+0x158
scsi`scsi_hba_bus_config+0x5c
genunix`devi_config_common+0x8d
genunix`ndi_devi_config+0x1a
genunix`bus_config_phci+0x45
unix`thread_start+0x8
1 64870 iscsi_lun_offline:return iscsi_lun_offline - return:1
## but: No accessible any more
haggis:~# echo | format
[...]
1. c1t6d0 <drive type unknown>
/iscsi/[EMAIL PROTECTED],2
## first function called from iscsi_lun_offline is ndi_devi_enter, so
## we must be in the /* phys/ndi */ case
CPU FUNCTION
0 -> iscsi_lun_offline iscsi_lun_offline - lun:2
0 | iscsi_lun_offline:entry
0 -> ndi_devi_enter
0 <- ndi_devi_enter
0 -> ndi_devi_offline
/* phys/ndi */
ndi_devi_enter(ihp->hba_dip, &circ);
if ((lun_free == B_TRUE) &&
(ilp->lun_state == ISCSI_LUN_STATE_ONLINE)) {
rval = ndi_devi_offline(
ilp->lun_dip, NDI_DEVI_REMOVE);
} else {
rval = ndi_devi_offline(
ilp->lun_dip, 0);
}
## free argument is always 0
dtrace: script '/var/tmp/trace_iscsi.s' matched 2 probes
CPU FUNCTION
0 -> iscsi_lun_offline iscsi_lun_offline - lun:2 free 0
0 <- iscsi_lun_offline iscsi_lun_offline - return:1
0 -> iscsi_lun_offline iscsi_lun_offline - lun:2 free 0
0 <- iscsi_lun_offline iscsi_lun_offline - return:1
1 -> iscsi_lun_offline iscsi_lun_offline - lun:2 free 0
1 <- iscsi_lun_offline iscsi_lun_offline - return:1
1 -> iscsi_lun_offline iscsi_lun_offline - lun:2 free 0
1 <- iscsi_lun_offline iscsi_lun_offline - return:1
Only place where iscsi_lun_offline is called with lun_free==B_TRUE is
iscsi_lun_destroy, which is only being called from iscsi_sess_destroy.
This message posted from opensolaris.org
_______________________________________________
storage-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/storage-discuss