On Thu, Nov 10, 2011 at 4:50 PM, sumeet gandhare <[email protected]>wrote:
> Hi All, > I am trying to understand the scsi upper layer and middle layer code and > found the function sd_prep_fn which seems to convert a request to a scsi > command. I want to know when this function sd_prep_fn gets invoked. > > It seems sd_probe_async invokes > > blk_queue_prep_rq > <http://lxr.linux.no/linux+*/+code=blk_queue_prep_rq>(sdp > <http://lxr.linux.no/linux+*/+code=sdp>->request_queue > <http://lxr.linux.no/linux+*/+code=request_queue>, sd_prep_fn > <http://lxr.linux.no/linux+*/+code=sd_prep_fn>); > > Further following code is invoking the prep_rq_fn > > which is the blk_peek_request > > http://lxr.linux.no/#linux+v3.1/block/blk-core.c#L1879 > <http://lxr.linux.no/#linux+v3.1/block/blk-core.c%23L1879> > > and blk_peek_request is getting invoked from > > scsi_request_fn > http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_lib.c#L1493 > <http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_lib.c%23L1493> > > > scsi_request_fn is registered with the block layer as a request function at > the following code > > http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_lib.c#L1688 > <http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_lib.c%23L1688> > > And scsi_alloc_queue is invoked from scsi_alloc_sdev > http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_scan.c#L238 > <http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_scan.c%23L238> > > scsi_alloc_sdev is invoked as a part of scsi lun discovery from lots of places > > http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_scan.c#L1004 > <http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_scan.c%23L1004> > > http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_scan.c#L1306 > <http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_scan.c%23L1306> > > The confusion I have is that the sd.c upper layer driver has not registered > for a request function using blk_init_queue > > Any help would be appreciated. > > Thanks > Sumeet > > > _______________________________________________ > Kernelnewbies mailing list > [email protected] > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > > Hello Sumeet, sd_prep_fn function is set to the request queue's prep_rq_fn member as you have mentioned. Now this function gets called in ret = q->prep_rq_fn(q, rq); in function blk_peek_request() which is called from scsi_request_fn() in file scsi_lib.c Regards, Rohan Puri
_______________________________________________ Kernelnewbies mailing list [email protected] http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
