Breaking up a bvec in a bio for reading more than 512

Pranay Srivastava pranjas at gmail.com
Tue Jan 7 10:57:59 EST 2014


On Jan 6, 2014 11:34 PM, "neha naik" <nehanaik27 at gmail.com> wrote:
>
> Hi All,
>   I figured out the method by some trial and error and looking at the
> linux source code.
>   We can do something like this :
>       Say we want to read pages of bvec in 512 chunks. Create bio with
> a single page and read 512 chunk of data from wherever you want to (it
> can be different disks).
>
>            dst = kmap_atomic(bvec->bv_page, KM_USER0); ---> bvec is of
> original bio
>            src = kmap_atomic(page, KM_USER0); ---> page we read by
> creating new bio
>            memcpy(dst+offset, src, 512);
>            kunmap_atomic(src, KM_USER0);
>            kunmap_atomic(dst, KM_USER0);
>
How this solves the problem of data being on different disks?

> My difficulty was not being able to access the high memory page in
> kernel. I was earlier trying to increment the offset of the bvec and
> pass the page to the layer below assuming that it would read in the
> data at correct offset but of course it was resulting in panic. The
> above solves that. Of course, if there is some other method which
> involves not creating any bio i would love to know.
>
> Regards,
> Neha
>
>
> On Sat, Jan 4, 2014 at 9:32 AM, Pranay Srivastava <pranjas at gmail.com>
wrote:
> >
> > On 04-Jan-2014 5:18 AM, "neha naik" <nehanaik27 at gmail.com> wrote:
> >>
> >> Hi All,
> >>    I am getting a request with bvec->bv_len > 512. Now, the
> >> information to be read is scattered across the entire disk in 512
> >> chunks. So that, information on disk can be : sector 8, sector 100,
> >> sector 9.
> >>  Now if i get a request to read with the bvec->bv_len > 512 i need to
> >> pull in the information from
> >> multiple places on disk since the data is not sequentially located.
> >>  I tried to look at the linux source code because i think raid must be
> >> doing it all the time. (eg : on disk 1 we may be storing sector 6 and
> >> on disk 2 we may be storing sector 7 and so on).
> >
> > You are right. Perhaps you need to clone the bio and set them properly.
I
> > guess you ought to check dm driver's make_request function. It does
clone
> > bio.
> >
> > I don't know if you can split that request while handling it. Perhaps
> > reinserting that request could work.
> >
> >>   However, i have not really got any useful information from it. Also
> >> scouring through articles on
> >> google has not helped much.
> >>    I am hoping somebody points me in the right direction.
> >>
> >> Thanks in advance,
> >> Neha
> >>
> >> _______________________________________________
> >> Kernelnewbies mailing list
> >> Kernelnewbies at kernelnewbies.org
> >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> >
> >       ---P.K.S
>
> _______________________________________________
> 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/20140107/47849960/attachment.html 


More information about the Kernelnewbies mailing list