git: hammer2 - Fix bulkfree bugs

Matthew Dillon dillon at crater.dragonflybsd.org
Fri Aug 18 22:43:25 PDT 2017


commit fae225dce61daa160e17d4cbdace35108ad1ed6f
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Fri Aug 18 22:36:23 2017 -0700

    hammer2 - Fix bulkfree bugs
    
    * Fix a bug where the HAMMER2_CHAIN_ONFLUSH flag could become desynchronized,
      preventing some modifications from chaining the flag to the root.
    
      This caused the bulkfree's flush to miss some chains and thus free
      blocks that should not have been freed.
    
      With this fix concurrent bulkfree and modifying operations appear to
      work properly.
    
    * For now do two quick flush passes in the bulkfree code.  We probably
      need only one.
    
      Note on the bulkfree code: This code operates by flushing currently
      modified chains and then taking a snapshot of the vchain blockmap.
      The bulkfree code can then operate on the snapshot concurrent with
      active filesystem operations, without interfering with or being
      interfered with by those operations.
    
      The bulkfree code does not have to flush modified in-memory inodes or
      buffer cache buffers, it need only flush modified hammer2_chain structures
      which may have done allocations, in order to properly account for those
      allocations.  Bulkfree runs in two stages precisely in order to allow
      concurrency.
    
    * Adjust hammer2.h so userland kvm debugging programs can access it.
    
    * Add a debug program called h2chains.c which dumps the chain and
      checks flag consistency via kvm given a hammer2 hmp root address.

Summary of changes:
 sys/vfs/hammer2/hammer2.h              |  16 +++-
 sys/vfs/hammer2/hammer2_bulkfree.c     |  42 +++-------
 sys/vfs/hammer2/hammer2_flush.c        | 145 ++++++++++++++++++++-------------
 test/debug/{ksyscalls.c => h2chains.c} | 112 +++++++++++++++++--------
 4 files changed, 196 insertions(+), 119 deletions(-)
 copy test/debug/{ksyscalls.c => h2chains.c} (54%)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/fae225dce61daa160e17d4cbdace35108ad1ed6f


-- 
DragonFly BSD source repository



More information about the Commits mailing list