git: hammer2 - Reduce flush complexity, fix panics

Matthew Dillon dillon at
Wed Mar 5 18:45:27 PST 2014

commit 052e0aa030a0e4377891f952f2169e0f2880c20a
Author: Matthew Dillon <dillon at>
Date:   Wed Mar 5 18:37:57 2014 -0800

    hammer2 - Reduce flush complexity, fix panics
    * Set synchronous flush mode by default for now to reduce sources of
      potential crashes so the core can be stabilized.
      This means that the only transactions that will run with a higher
      transaction id during a flush are allocations from the freemap made
      by the flush itself.  This is far easier to debug.
      Concurrent frontend transactions are disabled during a flush, for now.
    * The buffer flush which is run synchronously from the main flush now always
      uses an async + sync vfsync sequence and does not allow any buffers to
      be left over before entering the main flush.
    * The buffer flush now also uses the same transaction id as the main flush.
      A new flag, HAMMER2_TRANS_PREFLUSH is used to manage this mechanic and
      to assert on any illegal buffer flushes.
    * Fix miscellanious assertions that were incorrect, and split the pass4
      codepath in the flush into pass4 and pass5 to fix another bug.
    * Fix an improper semicolon (from swildner)
    * Remove more dead code.
    * The hammer2_vop_reclaim() code was the only code path that would acquire
      a hammer2_inode lock prior to starting a transaction for a modifying
      operation (for the delete unlinked file on last reference).  Fix this
      code to open the transaction first and obtain the inode lock second,
      which fixes a deadlock.
    * Fix an infinite while() loop due to improper arguments in a TAILQ_NEXT()

Summary of changes:
 sys/vfs/hammer2/hammer2.h         |   2 +-
 sys/vfs/hammer2/hammer2_flush.c   | 240 +++++++++++++++++++++-----------------
 sys/vfs/hammer2/hammer2_freemap.c |   8 +-
 sys/vfs/hammer2/hammer2_vfsops.c  |  47 ++++----
 sys/vfs/hammer2/hammer2_vnops.c   |  32 +++--
 5 files changed, 186 insertions(+), 143 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list