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