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