To clarify (with wonderful ASCII art), an un-indexed directory would have
data blocks like:
<d0> <d1> <d2> <d3> (wherever we decide the cutoff is for indexing)
When we start with a single level index, it looks like:
<index header > 0 0 0 0 0 0 0 0 0 0 0 <indirect0>
/ | | \
<d0> <d1> ... <dN>
> If you need to go to a second-level index, you can simply shift the
> indirect data block to be a double-indirect block, and start the level-2
> index in the first indirect block.
So it would look like:
<index header > 0 0 0 0 0 0 0 0 0 0 0 <index_indirect> <dindirect0>
/ | / \
<index0><index1> <indirect0> <indirect1>
/ | | \
<d0> <d1> ... <dN>
> If we ever need a third-level index, you basically do the same thing -
> move the double-indirect blocks to triple-indirect, and put the level-3
> index in the double-indirect block. The index blocks will always fit,
> because the index branching level is 1/2 of the indirect block
> branching because the index has the extra 4-byte hash values.
The benefit is that you don't need to do any copying of directory
block pointers (or contents) when you need to go to the next-level
index.
Cheers, Andreas
-- Andreas Dilger \ "If a man ate a pound of pasta and a pound of antipasto, \ would they cancel out, leaving him still hungry?" http://www-mddsp.enel.ucalgary.ca/People/adilger/ -- Dogbert - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/