git: hammer2 - Change XOP feed/collect locking

Matthew Dillon dillon at crater.dragonflybsd.org
Sun Jun 19 12:05:48 PDT 2016


commit 6d51e13ade73a84bc976316303593a37f14a3753
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sun Jun 19 11:59:30 2016 -0700

    hammer2 - Change XOP feed/collect locking
    
    * Change the way the backend passes chains back to the frontend.  Instead
      of requiring that the chain maintain a shared lock and bumping the lock
      count we use the new data retention feature to pass the chain back
      unlocked.
    
      This fixes a whole slew of deadlock issues related to multi-node
      synchronization.  Concurrent XOPs could previously obtain and hold
      locks on chains related to different nodes in any order, depending on
      when their related threads were scheduled.  Now that we no longer hold
      a lock in the XOP feed, the potential deadlocks should not be possible.
    
    * Add new hammer2_chain_*() API functions for manipulating the data hold
      count and remove shims that were previously used to deal with the shared
      lock hacks.
    
    * Also fix a chain->flags adjustment that wasn't atomic, fixing a tsleep()
      loop that was not breaking out.

Summary of changes:
 sys/vfs/hammer2/hammer2.h       |  7 ++++-
 sys/vfs/hammer2/hammer2_admin.c | 40 +++++++----------------
 sys/vfs/hammer2/hammer2_chain.c | 70 ++++++++++++++++++++++++++++++++++++++++-
 sys/vfs/hammer2/hammer2_inode.c |  6 ----
 sys/vfs/hammer2/hammer2_xops.c  |  6 ----
 5 files changed, 86 insertions(+), 43 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/6d51e13ade73a84bc976316303593a37f14a3753


-- 
DragonFly BSD source repository


More information about the Commits mailing list