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

Reply via email to