scsi subsystem in linux
Jack Wang
xjtuwjp at gmail.com
Wed Nov 6 04:55:38 EST 2013
On 11/05/2013 05:19 PM, nidhi mittal hada wrote:
> 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 ?
>
>
The links below show how block layer request connect to scsi request,
but In Chinese, sorry, but you may find clue in the code section.
http://blog.csdn.net/fudan_abc/article/details/1966510
http://blog.csdn.net/fudan_abc/article/details/1966538
http://blog.csdn.net/fudan_abc/article/details/1967045
http://blog.csdn.net/fudan_abc/article/details/1967050
BTW: Why not use dm-crypt?
Jack
>
>
>
>
>
> On Tue, Nov 5, 2013 at 6:34 PM, nidhi mittal hada
> <nidhimittal19 at gmail.com <mailto: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 <mailto: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
> <mailto: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
> <mailto: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/
>
More information about the Kernelnewbies
mailing list