scsi subsystem in linux
From: pmkernel <hidden>
Date: 2013-11-08 08:53:56
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 -------- Original message -------- From: Jack Wang <redacted> Date: To: nidhi mittal hada <redacted> Cc: Kernelnewbies <redacted>,"rohan.puri.15" <redacted>,sumeetgandhare <redacted>,kernelnewbies at kernelnewbies.org Subject: Re: scsi subsystem in linux 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@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@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@gmail.com
???????? <mailto:xjtuwjp@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@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/20131108/1e241e7d/attachment-0001.html