cvs commit: src/sys/vfs/hammer hammer_btree.c hammer_cursor.c hammer_cursor.h hammer_inode.c hammer_io.c hammer_object.c hammer_ondisk.c hammer_vnops.c
Matthew Dillon
dillon at crater.dragonflybsd.org
Wed Aug 6 08:41:12 PDT 2008
dillon 2008/08/06 08:38:58 PDT
DragonFly src repository
Modified files:
sys/vfs/hammer hammer_btree.c hammer_cursor.c
hammer_cursor.h hammer_inode.c
hammer_io.c hammer_object.c
hammer_ondisk.c hammer_vnops.c
Log:
HAMMER 2.1:01 - Stability
* Fix a bug in the B-Tree code. Recursive deletions are done prior to
marking a node as actually being empty, but setup for the deletion
(by calling hammer_cursor_deleted_element()) must still occur prior
to the recursrion so cursor indexes are properly adjusted for the
possible removal. If the recursion is not successful we can just leave
the cursors post-adjusted since the subtree has an empty leaf anyway.
* Rename HAMMER_CURSOR_DELBTREE to HAMMER_CURSOR_RETEST so its function
is more apparent.
* Properly set the HAMMER_CURSOR_RETEST flag when relocking a cursor
that has tracked a ripout, so the cursor's new current element is
re-tested by any iteration using the cursor.
* Remove code that allowed a SETUP record to be converted to a FLUSH
record if the target inode is already in the correct flush group.
The problem is that target inode has already setup its sync state
for the backend and the nlinks count will not be correct if we
add another directory ADD/DEL record to the flush. While strictly
a temporary nlinks mismatch (the next flush would correct it), a
crash occuring here would result in inconsistent nlink counts on
the media.
* Reference and release buffers instead of directly calling low level
hammer_io_deallocate(), and generally reference and release buffers
around reclamations in the buffer/io invalidation code to avoid
races. In particular, the buffer must be referenced during a
call to hammer_io_clear_modify().
* Fix a buffer leak in hammer_del_buffers() which is not only bad unto
itself, but can also cause reblocking assertions on the presence of
buffer aliases later on.
* Return ENOTDIR if rmdir attempts to remove a non-directory.
Reported-by: Francois Tigeot <ftigeot at wolfpond.org> (rmdir)
Reported-by: YONETANI Tomokazu <qhwt+dfly at les.ath.cx> (multiple)
Revision Changes Path
1.76 +10 -2 src/sys/vfs/hammer/hammer_btree.c
1.42 +7 -1 src/sys/vfs/hammer/hammer_cursor.c
1.26 +1 -1 src/sys/vfs/hammer/hammer_cursor.h
1.109 +10 -10 src/sys/vfs/hammer/hammer_inode.c
1.53 +25 -4 src/sys/vfs/hammer/hammer_io.c
1.95 +18 -15 src/sys/vfs/hammer/hammer_object.c
1.75 +12 -7 src/sys/vfs/hammer/hammer_ondisk.c
1.95 +2 -0 src/sys/vfs/hammer/hammer_vnops.c
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_btree.c.diff?r1=1.75&r2=1.76&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_cursor.c.diff?r1=1.41&r2=1.42&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_cursor.h.diff?r1=1.25&r2=1.26&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_inode.c.diff?r1=1.108&r2=1.109&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_io.c.diff?r1=1.52&r2=1.53&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_object.c.diff?r1=1.94&r2=1.95&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_ondisk.c.diff?r1=1.74&r2=1.75&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/hammer/hammer_vnops.c.diff?r1=1.94&r2=1.95&f=u
More information about the Commits
mailing list