Reiser4 uses "wandered logs" that are similar to phase-tree or things
that are called "shadows" or "side files" in the data bases world.
Idea is that most blocks with file system data (and meta-data) are
accessed by first reading their block number from some other "parent"
block (like indirect block in ext2). Now, if block is modified during
transaction *and* its parent block is also dirty, one can avoid writing
copy of block into the journal by:
- allocating new block number ("wandered block")
- storing modified content in the newly allocated wandered block
- updating parent block to point to the new location
Old block is now unreachable from the parent, and if its block number is
stored somewhere in the journal one can use it for recovery.
Reiser4 balanced tree lends itself nicely into this model, of course.
Usual problem with such techniques is that they tend to destroy packing
due to frequent relocations. But in reality this can be used exactly for
the purpose of improving packing, if allocation of wandered blocks if
delayed for sufficiently long time (like until transaction commit).
>
> (In fact, from the description it sounds like it gives _more_ guarantees
> than even ext3 with ordered writes, in that it gives transactional
> behaviour for arbitrary writes. Maybe I should read the paper).
>
> Linus
Nikita.
> -
-
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/