git: DragonFly_RELEASE_4_6 kernel - Close a few SMP holes

Matthew Dillon dillon at crater.dragonflybsd.org
Mon Jul 25 14:35:34 PDT 2016


commit b036d3323176a1111c6ee73f4ebad084285e2392
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sun Jul 24 21:55:00 2016 -0700

    kernel - Close a few SMP holes
    
    * Don't trust the compiler when loading refs in cache_zap().  Make sure
      it doesn't reorder or re-use the memory reference.
    
    * In cache_nlookup() and cache_nlookup_maybe_shared(), do a full re-test
      of the namecache element after locking instead of a partial re-test.
    
    * Lock the namecache record in two situations where we need to set a
      flag.  Almost all other flag cases require similar locking.  This fixes
      a potential SMP race in a very thin window during mounting.
    
    * Fix unmount / access races in sys_vquotactl() and, more importantly, in
      sys_mount().  We were disposing of the namecache record after extracting
      the mount pointer, then using the mount pointer.  This could race an
      unmount and result in a corrupt mount pointer.
    
      Change the code to dispose of the namecache record after we finish using
      the mount point.  This is somewhat more complex then I'd like, but it
      is important to unlock the namecache record across the potentially
      blocking operation to prevent a lock chain from propagating upwards
      towards the root.
    
    * Enhanced debugging for the namecache teardown case when nc_refs changes
      unexpectedly.
    
    * Remove some dead code (cache_purgevfs()).

Summary of changes:
 sys/kern/vfs_cache.c    | 62 ++++++++++++++-----------------------------------
 sys/kern/vfs_conf.c     |  9 ++++++-
 sys/kern/vfs_quota.c    | 31 ++++++++++++++-----------
 sys/kern/vfs_syscalls.c | 37 ++++++++++++++++++++++-------
 4 files changed, 72 insertions(+), 67 deletions(-)

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


-- 
DragonFly BSD source repository



More information about the Commits mailing list