cvs commit: src/sys/vfs/hammer hammer.h hammer_btree.c hammer_cursor.c hammer_cursor.h hammer_inode.c hammer_object.c hammer_ondisk.c hammer_recover.c hammer_spike.c hammer_subs.c hammer_vnops.c

Matthew Dillon dillon at crater.dragonflybsd.org
Thu Jan 17 23:05:40 PST 2008


dillon      2008/01/17 23:02:41 PST

DragonFly src repository

  Modified files:
    sys/vfs/hammer       hammer.h hammer_btree.c hammer_cursor.c 
                         hammer_cursor.h hammer_inode.c 
                         hammer_object.c hammer_ondisk.c 
                         hammer_recover.c hammer_spike.c 
                         hammer_subs.c hammer_vnops.c 
  Log:
  HAMMER 21/many: B-Tree node locking finalization.
  
  * Implement the final locking scheme for B-Tree nodes.  Use shared locks
    for all searches, upgrade to exclusive locks for modifications.  If
    unable to upgrade fall through with an EDEADLK error code and retry the
    operation after releasing all other locks and blocking on the lock that
    could not be obtained.
  
    Simple iterations never fail and do not need to handle an EDEADLK error
    code.
  
    Because EDEADLK can actually occur quite often the error paths for most
    code modules will begin to get some exercise, which is good for code
    stability.
  
    It is possible to cache cursor positions closer to the desired target
    to reduce re-lookup times but I don't try to do this yet.
  
  * Finalize code for basic (unbalanced) deletions.   Neither leaf nor internal
    nodes are allowed to be empty any more (except at the root of a cluster),
    but recursive deletions may deadlock while going up the tree and leave
    an internal node with a zero'd out element.   The search and iteration
    code now properly detects such elements and finishes off the deletion,
    though a complete cleaning will be left up to the balancing module.
  
  * Remove most instances of recursively instantiated cursors.  There is still
    one left in the directory deletion code.
  
  * Remove all remaining unprotected cursor transitions (where locks had to be
    released to avoid deadlocks).
  
  Revision  Changes    Path
  1.26      +17 -2     src/sys/vfs/hammer/hammer.h
  1.21      +172 -99   src/sys/vfs/hammer/hammer_btree.c
  1.14      +76 -41    src/sys/vfs/hammer/hammer_cursor.c
  1.8       +9 -4      src/sys/vfs/hammer/hammer_cursor.h
  1.22      +12 -3     src/sys/vfs/hammer/hammer_inode.c
  1.21      +58 -21    src/sys/vfs/hammer/hammer_object.c
  1.22      +3 -2      src/sys/vfs/hammer/hammer_ondisk.c
  1.4       +3 -0      src/sys/vfs/hammer/hammer_recover.c
  1.9       +12 -4     src/sys/vfs/hammer/hammer_spike.c
  1.12      +32 -1     src/sys/vfs/hammer/hammer_subs.c
  1.22      +27 -14    src/sys/vfs/hammer/hammer_vnops.c


http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer.h.diff?r1=1.25&r2=1.26&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_btree.c.diff?r1=1.20&r2=1.21&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_cursor.c.diff?r1=1.13&r2=1.14&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_cursor.h.diff?r1=1.7&r2=1.8&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_inode.c.diff?r1=1.21&r2=1.22&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_object.c.diff?r1=1.20&r2=1.21&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_ondisk.c.diff?r1=1.21&r2=1.22&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_recover.c.diff?r1=1.3&r2=1.4&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_spike.c.diff?r1=1.8&r2=1.9&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_subs.c.diff?r1=1.11&r2=1.12&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_vnops.c.diff?r1=1.21&r2=1.22&f=u





More information about the Commits mailing list