On Tue, 15 May 2018, Tushar Nimkar wrote:

> Everyone,
> 
> Please help me in understanding sd_probe| storage_probe/1/2 and 
> uas_probe | scsi_scan_host :)
> Basically want to know the correct sequence for them? How 
> sd_probe_async() is called (ASYNC_DOMAIN(scsi_sd_probe_domain))?

Very briefly:

The probe routine for usb-storage is storage_probe(), which calls
usb_stor_probe1() and usb_stor_probe2().  Similarly, the probe routine 
for uas is uas_probe().  Each driver's probe routine is called by the 
driver core (drivers/base/dd.c) when a new device of the appropriate 
type is detected.

usb_stor_probe2() starts a workqueue routine, usb_stor_scan_dwork(), 
which calls scsi_scan_host(), whereas uas_probe() calls 
scsi_scan_host() directly.  Either way, scsi_scan_host() usually sets 
up an async worker to carry out the actual scanning.  The scanning is 
started by scsi_scan_target() and the various routines it calls.

When the scanning procedure registers a SCSI device that is a 
disk-drive-like device, the sd driver's sd_probe() routine is called by 
the driver core.  sd_probe() does some of the initial work needed to 
probe the device, and it defers the rest of the work to the async 
worker routine sd_probe_async().

> Is there any document which say it in detail ?

No.  UTSL.  You might concentrate on include/linux/async.h and
kernel/async.c (and you should be able to figure that much out for
yourself without asking the mailing list).

Alan Stern

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

Reply via email to