On Thu, Nov 10, 2011 at 4:50 PM, sumeet gandhare <sumeetgandhare@xxxxxxxxx> wrote:
Hello Sumeet,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 invokesblk_queue_prep_rq(sdp->request_queue, 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
and blk_peek_request is getting invoked from
scsi_request_fn
http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_lib.c#L1493
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
And scsi_alloc_queue is invoked from scsi_alloc_sdev
http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_scan.c#L238
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#L1306
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
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
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 Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies