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

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

 




On Jan 6, 2014 11:34 PM, "neha naik" <nehanaik27@xxxxxxxxx> 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 = "" 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@xxxxxxxxx> wrote:
> >
> > On 04-Jan-2014 5:18 AM, "neha naik" <nehanaik27@xxxxxxxxx> 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@xxxxxxxxxxxxxxxxx
> >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> >
> >       ---P.K.S
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies@xxxxxxxxxxxxxxxxx
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

_______________________________________________
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