On Thu, Nov 10, 2011 at 6:13 PM, rohan puri <[email protected]> wrote:

>
>
> 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
>

Hi Rohan,
 Thanks for your response and help.
 It seems there is scsi_prep_fn too. I thought the blk_peek_request()
invokes scsi_prep_fn and not sd_prep_fn.

http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_lib.c#L1248

scsi_prep_fn is registered here

http://lxr.linux.no/#linux+v3.1/drivers/scsi/scsi_lib.c#L1684


Please could you confirm.

Thanks
Sumeet
_______________________________________________
Kernelnewbies mailing list
[email protected]
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to