scsi subsystem in linux

piyush moghe pmkernel at gmail.com
Thu Nov 7 03:54:43 EST 2013


I think sd_prep_fn is a generic function for any SCSI device while
scsi_prep_fn specifically SCSI Disks or LUN's, so if you have a filesystem
created on top of SCSI Disk scsi_prep_fn function will be called. In case
you have any other SCSI device then you will have sd_prep_fn will be called.

The comment on top of sd_probe mentions this:

/**
 * sd_probe - called during driver initialization and whenever a
 * new scsi device is attached to the system. It is called once
 * for each scsi device (not just disks) present.
 * @dev: pointer to device object


Similarly argument to scsi_alloc_sdev ( while internally calls
scsi_alloc_queue ---> blk_queue_prep_rq(q, scsi_prep_fn) ) accepts lun id
which I think is specific to SCSI LUN.

For understanding linux SCSI Subsystem you can also refer to kernel SCSI
documentation and also the below mentioned link:

http://www.andante.org/scsidoc/SCSI-1.html


Regards,
Piyush Moghe

On Wed, Nov 6, 2013 at 3:25 PM, Jack Wang <xjtuwjp at gmail.com> wrote:

> 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/
> >
>
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20131107/2d9e41d9/attachment.html 


More information about the Kernelnewbies mailing list