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
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 
  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.
    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> (rmdir)
  Reported-by: YONETANI Tomokazu <qhwt+dfly at> (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

More information about the Commits mailing list