git: HAMMER - Fix lost inode issue (primarily with nohistory mounts)
Matthew Dillon
dillon at crater.dragonflybsd.org
Thu Sep 3 08:26:27 PDT 2009
commit c9ce54d64fd77d8901f15263a4acbfda66fc1d0b
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Thu Sep 3 08:18:43 2009 -0700
HAMMER - Fix lost inode issue (primarily with nohistory mounts)
* When a HAMMER cursor is unlocked it becomes tracked and unrelated
B-Tree operations will cause the tracked cursor's nodes and indices
to be updated. The cursor structure also has a leaf element pointer
which was not being properly updated. This could lead to panics and
lost inodes.
Properly adjust the leaf element pointer in tracked cursors.
* The bug primarily occurs with nohistory mounts or nohistory sub-trees
due to the larger number of physical deletions made to the B-Tree, but
could also occur (rarely) with normal mounts.
* Add additional assertions to catch any further occurrences (though I
think all the cases have been covered now).
* Add a new sysctl vfs.hammer.error_panic which can be set to e.g. 9 to
cause critical errors to panic immediately instead of returning
through the call stack, making debugging possible.
Reported-by: Numerous people
Summary of changes:
sys/vfs/hammer/hammer_btree.c | 7 +++++
sys/vfs/hammer/hammer_cursor.c | 50 ++++++++++++++++++++++++++++++++++++-
sys/vfs/hammer/hammer_inode.c | 2 +
sys/vfs/hammer/hammer_mirror.c | 6 ++++
sys/vfs/hammer/hammer_object.c | 13 +++++++++-
sys/vfs/hammer/hammer_pfs.c | 2 +
sys/vfs/hammer/hammer_prune.c | 3 ++
sys/vfs/hammer/hammer_rebalance.c | 3 ++
sys/vfs/hammer/hammer_reblock.c | 10 ++++++-
sys/vfs/hammer/hammer_vfsops.c | 14 ++++++++--
sys/vfs/hammer/hammer_vnops.c | 3 ++
11 files changed, 107 insertions(+), 6 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/c9ce54d64fd77d8901f15263a4acbfda66fc1d0b
--
DragonFly BSD source repository
More information about the Commits
mailing list