git: hammer2 - refactor some chain bits, stabilization

Matthew Dillon dillon at
Wed Sep 2 21:40:32 PDT 2015

commit 3f4ec3cf3c60137ae82230d6581889b4bdc1c12b
Author: Matthew Dillon <dillon at>
Date:   Wed Sep 2 21:11:08 2015 -0700

    hammer2 - refactor some chain bits, stabilization
    * Refactor the hammer2_chain_t MODIFIED and UPDATE flags to not
      reference the chain.
    * Automatically flag DESTROY on a chain on last-drop if chain->parent is
      NULL, and automatically clear UPDATE and try to clear MODIFY.  Add the
      chain to the delayed-flush queue if MODIFIED cannot be cleared.
    * Fix a flags bug in hammer2_chain_hardlink_find() which could deadlock
      competing threads.
    * The collect code now aggregates errors and the cluster check code now
      also aggregates errors.  This allows feeders to feed an error code to
      the collector.
    * Fix rmdir and rename to disallow removal of non-empty directories.
    * hammer2_inode_xop_flush() now proceeds with a flush if hmp->flushq
      is not empty, even if the chain is not marked for flushing.  This
      still needs some work.
    * Add a sideq for dirty inodes that might have to be flushed.  Used for
      unlinked dirty inodes which might still be open.
    * Call hammer2_inode_modify() whenever possible instead of setting the
      HAMMER2_INODE_MODIFIED flag manually.
    * Test for chain leaks against blogbench, fsx, and fsstress.

Summary of changes:
 sys/vfs/hammer2/hammer2.h          |   8 +-
 sys/vfs/hammer2/hammer2_chain.c    | 161 +++++++++++++++++++++++++------------
 sys/vfs/hammer2/hammer2_cluster.c  |  32 ++++++--
 sys/vfs/hammer2/hammer2_flush.c    |  46 ++++++-----
 sys/vfs/hammer2/hammer2_inode.c    |  44 +++++-----
 sys/vfs/hammer2/hammer2_strategy.c |   6 ++
 sys/vfs/hammer2/hammer2_thread.c   |   4 +
 sys/vfs/hammer2/hammer2_vfsops.c   |  18 ++---
 sys/vfs/hammer2/hammer2_vnops.c    |   8 +-
 sys/vfs/hammer2/hammer2_xops.c     |  34 +++++++-
 10 files changed, 245 insertions(+), 116 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list