Re: Doubt regarding BIO handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Dec 27, 2010 at 7:18 PM, Gaurav Mahajan
<gauravmahajan2007@xxxxxxxxx> wrote:
> Hello all,
>
> Thanks for the information!!!
>
>
>
> On Mon, Dec 27, 2010 at 2:37 PM, Prasad Joshi <prasadjoshi124@xxxxxxxxx> wrote:
>> On Mon, Dec 27, 2010 at 6:01 AM, Gaurav Mahajan
>> <gauravmahajan2007@xxxxxxxxx> wrote:
>>> Hi all,
>>>
>>> I have a doubt regarding the handling of bios.
>>>
>>> Suppose I receive a bio at some layer, and I want to split it into
>>> multiple bios. There are layers below the one I am working on and the
>>> final I/O operations will be handled by those layers. So, basically ,
>>> after some processing, I want to hand over the bio to the lower layer.
>>> Now, if I have split the original bio into multiple bios and submitted
>>> all the newly formed bios, I shall receive each such bio in the
>>> bio->bio_end_io function.
>>>
>>> Here is it necessary to merge these bios so that the original bio can
>>> be formed or is it ok to just split the original bio, receive the
>>> requested data in multiple bios and leave it at that ?
>>>
>>
>> IMHO, you still need to call bio->bio_end_io on the original BIO
>> structure. So instead of splitting the original BIO. I think, You
>> might want to keep the original BIO as it is. The smaller BIOs need to
>> point back to original BIO and once all of the smaller BIOs have been
>> serviced. You might want to call bio_end_io() on the original BIO.
>>
>
> I think the method of pointing back to original bio, you wrote here is
> about managing bi_idx fields of the split bios and keeping bio_vec
> array same for all. Can you please elaborate on this, if I'm wrong?
>
> Also I wanted to split one bvec into two bvecs. So I tried to split it
> using bvec's length and offset fields, but I am facing problem in
> merging these split bvecs in one. Or there is some other way I can do
> this?
>
> I am doubtful whether the pages are allocated for a bio when "read" is
> requested or when the actual data is read from disk (at the layer of
> I/O scheduler or device driver)?
>

I am not sure about this I did this some time back. As far as I can
remember, I think I created multiple BIOs and used bi_private field to
keep track of the parent BIOs and the number child BIOs.

This new BIOs had their own end_io function. In the
child_bio->end_io(), I would decrement the count of number of child
BIOs. If the number is zero, call the end_io function of the parent
BIO.

Hope this helps.

Speaking about the ordering of the BIOs, in my opinion, BIOs can be
reodere by IO schedular.

>
>> Have a look if you can use bi_private field.
>>
>>> Looking forward to some help.....
>>>
>>> Regards,
>>> Gaurav
>>>
>>> _______________________________________________
>>> Kernelnewbies mailing list
>>> Kernelnewbies@xxxxxxxxxxxxxxxxx
>>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>>
>>
>
> Thanks,
> Gaurav.
>

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux