On Wed, 21 February 2007 05:36:22 +0100, Juan Piernas Canovas wrote:It is quite simple. If 50% of your segments are busy, and the other 50%
I don't see how you can guarantee 50% free segments. Can you explain
that bit?
are free, and the file system needs a new segment, the cleaner starts
freeing some of busy ones. If the cleaner is unable to free one segment at
least, your file system gets "full" (and it returns a nice ENOSPC error).
This solution wastes the half of your storage device, but it is
deadlock-free. Obviously, there are better approaches.
Ah, ok. It is deadlock free, if the maximal height of your tree is 2.
It is not 100% deadlock free if the height is 3 or more.
Also, I strongly suspect that your tree is higher than 2. A medium
sized directory will have data blocks, indirect blocks and the inode
proper, which gives you a height of 3. Your inodes need to get accessed
somehow and unless they have fixed positions like in ext2, you need a
further tree structure of some sorts, so you're more likely looking at a
height of 5.
With a height of 5, you would need to keep 80% of you metadata free.
That is starting to get wasteful.
So I suspect that my proposed alternate cleaner mechanism or the even
better "hole plugging" mechanism proposed in the paper a few posts above
would be a better path to follow.