Re: [PATCH] fc_user_scan correction

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



James Smart wrote:


Mike Christie wrote:
Mike Christie wrote:
Is this is the same as if you did not implement the user_scan callout? scsi_sysfs.c will call

scsi_scan_host_selected(shost, channel, id, lun, 1);

I thought we added the user_scan callback because the transport classes had to pass in the device struct between the host and target so we got

.../host/rport/target/scsi_device

instead of

.../host/target/scsi_device

qla4xxx has the same problem. Do not look at it for help :( It added a mutex and does not deadlock because like the FC class it stats the removal of the rport/session then device so the cache sync always fails (the check ready function always returns DID_NO_CONNECT so the cache sync fails). iscsi tcp/iser/bnx2i works because it has userspace helping out with the removal and shutdown and does it in two stages.


I think we need some loop + locking + refcounting similar to how the shost_for_each_device loops over devices.


For FC, I don't believe there's any advantage to looping/locking. There's
miniscule advantages of not scanning targets that are just returned back
by the driver as not being present.

I was actually just thinking of refcounting. Because we are coming in from the host the rpot would not have a refcount from the sysfs/userpscae reference. If there were no scsi_devices/targets on the rport and the rport ie being removed then I thought the scsi_scan.c code could be accessing a struct device that was freed or in the middle of being freed.



Taking another look at the user_scan sysfs routine, I can only come up with
a few reasons why it exists at all:
 - some transports/LLDs, which do target enumeration and auto-scan, can't
   handle directed scans to targets that don't exist. I have a hard time
   believing this is true.

I am not sure what you are saying? Is this the same as my comment about
.../host/rport/target/scsi_device
vs
.../host/target/scsi_device

If you go down scsi_scan_host_selected then we go to
scsi_scan_host_selected -> scsi_scan_channel -> __scsi_scan_target and the parent that is passed to __scsi_scan_target is the shost, so we get
.../host/target/scsi_device

For the transport classes we did scsi_scan_target and pass the rport so we end up with
.../host/rport/target/scsi_device

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux