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 <[email protected]>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 <[email protected] > > 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 <[email protected]> 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 >>> > [email protected] >>> > 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 [email protected] http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
