Re: Re: question about striped_read

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

 



>On Thu, 25 Jul 2013, majianpeng wrote:
>> Hi all,
>> 	I met a problem and ask somebody could help me.
>> In func striped_read()
>> > if (ret > 0) {
>> >                int didpages = (page_align + ret) >> PAGE_CACHE_SHIFT;
>> 
>> >                if (read < pos - off) {
>> >                       dout(" zero gap %llu to %llu\n", off + read, pos);
>> >                        ceph_zero_page_vector_range(page_align + read,
>> >                                                    pos - off - read, pages);
>> >                }   
>> >                pos += ret;
>> >               read = pos - off;
>> 
>> At first , pos = off and off don't modify.
>> Why does it judge 'read < pos -off ' ?
>> Because the read = pos -off, so the read must equal pos -off.
>
>This block triggers if we hit a stripe.  off is always the original 
>starting offset.  pos is the current position that we just tried to read 
>from.  We might:
>
> - try to read a big extent from off == pos
> - readpages truncates this to the end of the object
> - we get a short read (not a complete object)
What's the mean of not a complete object?
FYI,a short read maybe  met the boundry of stripe(object) or the EOF of file.
For the hole of file, i don't know how to handle.
> - read is some partial amount
> - pos is off + read + a gap
>From the code :	read = pos - off; after that, the pos don't change.
So the a gap where is from?

Thanks!
Jianpeng Ma
> - we try to read from the next object and there is data
>   => there was a hole and we need to zero the gap
>
>If, on the other hand, there isn't data in the next object, then we don't 
>want to zero the hole.. and least not until we decide where EOF is.  
>That's why this block is where it is, and never triggers on the first 
>iteration.
>
>Does that make sense?
>sage?韬{.n?????%??檩??w?{.n????u朕?Ф?塄}?财??j:+v??????2??璀??摺?囤??z夸z罐?+?????w棹f





[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux