Re: delayed extent tree test cases

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

 



>>> get it to mirror the existing extents.  That way we will know what
>>> extents
>>> there are to lock before we start doing things with the current extent
>>> tree.
>>>
>>> When I think about all the ins and outs of trying to keep the trees in
>>> sync,
>>
>> Actually, delayed extents is also synced.  This can be easily achieved
>> by protecting operations on extent tree by i_data_sem.
>
> Ah, sorry I could have phrased that better.  What I meant was trying to keep
> the new status tree in sync with the on disk tree so that the status tree
> mirrors the same allocated extents in the on disk tree.
>
>>
>> I am a little confused by partial extent here.  I am guessing you
>> meant extent rb-tree in memory is the mirror of extent tree in inode
>> which is stored on disk.  Am I right?
>>
>> In my head, the extent tree used by extent lock traces logical
>> extents, for example, a process locks a range of a file and it does
>> not care the physical blocks.    So we just need to record logical
>> extent without physical blocks infos.  Then locking on an extent may
>> trigger splitting on an extent while unlocking may trigger merging on
>> extents.  Am I right?
>>
>> Yongqiang.
>>
>
> Well initially I was doing something similar to that, where we only lock
> logical ranges that may or may not be "extent aligned" with the on disk
> extents.  But the concern that I have though is that we may end up with
> processes that have the same on disk extent locked.  For example, say
> process A locks a logical range of blocks, 1-5 and process B locks a logical
> range of blocks 6-10.  But if the on disk extents are actually 1-2, 3-7 and
> 8-10, we have a situation where both processes own a piece of the 3-7
> extent, but they wont know it until they get down into the on disk extents.
>  And it seems to me they should really have the whole on disk extent locked
> before they do any on disk splitting.  And now we have a deadlock condition
> since one of them is going to have to give up their lock before the other
> can proceed.  So that's when I started thinking maybe we need to make sure
> that the locked ranges are extent aligned.  Does that make sense?
Extent lock is provided to user space process not to kernel, right?
An process acquires extent lock, so that other processes can not
access the locked extent.  In other words, extent lock is used to
protect data in file, not internal data structure of filesystem.  What
we need to guarantee is that data in the locked extent is not changed,
while extent tree on disk can be changed.

So maybe we just need to wait lock freed before truncate and puch
hole.  Are there any other operations changing data of a file?


 Maybe
> there is something I am overlooking that would help simplify.
Ok.  Now we have two extent trees - the first one is used to implement
extent locking while the second one is used to map logical blocks to
physical blocks.  If we protect operations on the two trees by
i_data_sem, then two trees are synced.  For example, given that a
process wants to modify a tree, it has to acquire i_data_sem, then no
other processes can access any tree.


Maybe I am overlooking something.:-)

Yongqiang.
>
> Allison Henderson
>
>>
>>>
>>> Thx!
>>> Allison Henderson
>>>
>>
>>
>>
>



-- 
Best Wishes
Yongqiang Yang
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux