git: HAMMER VFS - Use full-block undos for B-Tree nodes
Matthew Dillon
dillon at crater.dragonflybsd.org
Sat Oct 13 10:09:02 PDT 2012
commit 283a4a38e8d7fa8c794b0ef735303cf8c28ced79
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Sat Oct 13 10:03:03 2012 -0700
HAMMER VFS - Use full-block undos for B-Tree nodes
* Use a full-block undos instead of small byte-range undos for
B-Tree nodes.
There is no bug here per-say, but we are trying to improve
HAMMER's ability to recover after a power failure where a disk
drive is writing to the platter at the time of the failure.
While we have no control over any unrelated sectors that might
get smashed by such an event, the concern is that sectors being
specifically written might get corrupted beyond the ability for
the byte-range undo to fix.
The reason is that if, say, only 50 bytes in a B-Tree node need
updating, HAMMER must still do a 16K physical write to disk, so
really any portion of that 16K can wind up corrupt on a power
failure, not just the 50 bytes being changed.
So instead of writing a byte-ranged 50-byte UNDO we now write
a 16K undo for B-Tree elements.
* The hope is that this will improve cases where HAMMER has become
unmountable due to CRC errors in the B-Tree closer to the root of
the B-Tree (which are usually updated to update only the mirror_tid)
Reported-by: sgeorge, marino
Summary of changes:
sys/vfs/hammer/hammer.h | 15 +++++++++++----
sys/vfs/hammer/hammer_vfsops.c | 6 ++++++
2 files changed, 17 insertions(+), 4 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/283a4a38e8d7fa8c794b0ef735303cf8c28ced79
--
DragonFly BSD source repository
More information about the Commits
mailing list