On Fri, Jul 29, 2016 at 3:14 PM, François <[email protected]> wrote:
> Hi there,
>
> I've been reading LDD3's chapter 16 on block devices a few times, and have 
> made toys
> block layers module. Now I've been looking at the up-to-date examples 
> provided by martinez javier[1],
> but still there's a fundamental concept I fail to understand.
>
> Considering only the RM_FULL and RM_SIMPLE cases, a request queue is created, 
> bound with a lock, and associated
> with a request function.
>
> In the simple case, that function "sbull_request" processes each request from 
> the request queue, and delegates
> the work to "sbull_transfer", which basically performs some arithmetic and 
> does the actual data copy.
> This function is given a sector, a number of sectors, a pointer to a buffer, 
> and a read or write parameter
> extracted from the request using blk_rq_pos(), blk_rq_cur_sectors(), 
> req->buffer and rq_data_dir() respectively.
>
> On the other hand, the same mechanism is used, but a different function is 
> associated: "sbull_full_request".
> That function also extracts requests and delegates the actual work to 
> "sbull_xfer_request" which iterates on
> the request's bio, calls "sbull_xfer_bio" which itself iterates on the bio's 
> segments and finally,
> calls the same "sbull_transfer" function.
>
> What I fail to understand is: how (with the same initialization) the 
> behaviour of the module using those two
> somehow different mechanism is equivalent.

I don't see req->buffer. Which version you are using?

>
> One has to understand the full complexity of the underlying data structure 
> (requests having bio, having segments)
> while the other only reads the containing structure (the struct request) and 
> do the same job, without iterations.
>
> Bonus point, to give some context: I'm writing an asynchronous block-layer 
> which has to split requests into custom subrequest.
> I'm wondering which approach (between those two) I should pickup.

If this is a memory backed block driver, then perhaps you can handle
multiple requests[?]. I don't think you need
to actually break up the same request into multiple requests.

>
> Thanks for reading so far, and for any hints :)
>
>
> [1] https://github.com/martinezjavier/ldd3/blob/master/sbull/sbull.c
> --
> François
>
> _______________________________________________
> Kernelnewbies mailing list
> [email protected]
> https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



-- 
        ---P.K.S

_______________________________________________
Kernelnewbies mailing list
[email protected]
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to