scsi subsystem in linux

nidhi mittal hada nidhimittal19 at gmail.com
Tue Nov 5 11:19:30 EST 2013


My doubt is :-
When we know block device driver , request structure, request queue
operation .. as per LDD.
How and where the request structure we are getting in scsi layer
fits/relates to thi sblock layer request structure....

is the sequence ..block device layer request function -> calls scsi layer
request function ?







On Tue, Nov 5, 2013 at 6:34 PM, nidhi mittal hada
<nidhimittal19 at gmail.com>wrote:

> *Setting of sd_prep_fn()*
> sd_probe is called* whenever a* *new scsi device is attached to the
> system.  *
>
> sd_probe  calls ->  sd_probe_async->
>         inside sd_probe_async, request prep fn is set to *sd_prep_fn*
> >>>>like this  blk_queue_prep_rq(sdp->request_queue, sd_prep_fn);
>
>
> *Calling of sd_prep_fn*
> ?????
>
> Is this request queue sdp->request_queue, different from the request
> queue,
> for which scsi_prep_fn is used??
>
> Are they on different layers ?
>
> Is there some relation between them ?
>
>
>
> Thanks
> Nidhi
>
>
> On Tue, Nov 5, 2013 at 6:13 PM, nidhi mittal hada <nidhimittal19 at gmail.com
> > wrote:
>
>> scsi_alloc_sdev(must be called once for each scsi device) -->calls
>> scsi_alloc_queue (that sets up sdev->request_queue
>>                                     sets up scsi_request_fn and
>>                                     sets up req prep function as
>> scsi_prep_fn)
>>
>> 1738 struct request_queue *scsi_alloc_queue(struct scsi_device *sdev)
>> 1739 {
>> 1740         struct request_queue *q;
>> 1742         q = __scsi_alloc_queue(sdev->host,
>> scsi_request_fn);>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>> 1743         if (!q)
>> 1744                 return NULL;
>> 1746         blk_queue_prep_rq(q,
>> scsi_prep_fn);>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>> 1747         blk_queue_softirq_done(q, scsi_softirq_done);
>> 1748         blk_queue_rq_timed_out(q, scsi_times_out);
>> 1749         blk_queue_lld_busy(q, scsi_lld_busy);
>> 1750         return q;
>> 1751 }
>> And after this call sdev_request_queue is allocated................
>>
>> Now, scsi_request_fn should be called while processing each request in
>> this sdev->request_queue...
>> Please correct me if i m wrong.
>> Now, inside scsi_request_fn, we get next queueable request by calling
>> blk_peek_request - to fetch request from request queue ..
>>
>> blk_peek_request -> calls __elv_next_request to fetch next request-
>> and calls prep_rq_fn(q, rq);
>>
>>
>> *which is scsi_prep_fn not the sd_prep_fn isnt it ??*
>>
>>
>> Then where is sd_prep_fn is used for ??
>>
>> Thanks
>> Nidhi
>>
>>
>>
>>
>> On Tue, Nov 5, 2013 at 5:39 PM, Jack Wang <xjtuwjp at gmail.com> wrote:
>>
>>> Hi Nidhi,
>>>
>>> About the function call trace you can use ftrace to find out, another
>>> useful tool is scsi_logging_level to set more verbose logging output for
>>> scsi core.
>>>
>>> Regards
>>> Jack
>>> On 11/05/2013 12:48 PM, nidhi mittal hada wrote:
>>> >
>>> > Hi All
>>> >
>>> > i have got a requirement where I need to encrypt/decrypt data that goes
>>> > from scsi layer to a particular block device.
>>> > As per my understanding till now on scsi subsystem in linux, i think i
>>> > need to
>>> > use crypto api and call appropriate encrypt/decrypt function from sd
>>> > driver for block device.
>>> >
>>> > I need to locate that specific function where this change needs to be
>>> > made ...
>>> > I know basic block device driver writing in linux .. But not able to
>>> fit
>>> > scsi in this picture.
>>> >
>>> > I have few basic doubts.. kindly help in resolving ...
>>> >
>>> > 1) Now, as example block device driver sbull, as given LDD, works on
>>> > request queue, fetches req from this queue, using function req =
>>> > elv_next_request(q)),
>>> > in request function.
>>> > what is corresponding function in sd layer ?
>>> > That is the function where i have req->buffer in hand with me..
>>> >
>>> >
>>> > 2) For a write operation from initiator to disk
>>> > is the hierarchy like this
>>> > *sd_prep_fn*
>>> > generic block device request structure -> converted into scsi specific
>>> > request structure
>>> > OR
>>> > what is scsi_prep_fn for??
>>> >
>>> > 3)How is Scpnt pointer that is req-> special is used in sd_prep_func..
>>> > is processed? i mean which layer picks Scpnt up and processes ??
>>> >
>>> > 4)Any document any URL any kind of instruction will be extremely
>>> helpful.
>>> >
>>> > 5)Whenever a *new scsi device is attached *sd_probe is called
>>> > sd_async_probe() is the async part of sd_probe() So when this is called
>>> > the prep_fn is set to sd_prep_fn and hence this will be called.
>>> >
>>> > *But i thought sd_prep_fn should be called for each and every request
>>> > .....??*
>>> > Kindly help me to clear the confusion ..
>>> >
>>> >
>>> > Thanks
>>> > Nidhi
>>> >
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > Kernelnewbies mailing list
>>> > Kernelnewbies at kernelnewbies.org
>>> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>> >
>>>
>>>
>>
>>
>>
>>
>
>
> --
> Thanks & Regards
> Nidhi Mittal Hada
>
> http://nidhi-searchingmyself.blogspot.com/
>
>


-- 
Thanks & Regards
Nidhi Mittal Hada

http://nidhi-searchingmyself.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20131105/d9b91697/attachment-0001.html 


More information about the Kernelnewbies mailing list