git: kernel - Close a few SMP holes

Matthew Dillon dillon at
Sun Jul 24 22:01:19 PDT 2016

commit fda4c5f3ee0a939d4eec5cbb125d0944b4529cac
Author: Matthew Dillon <dillon at>
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
    * 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(-)

DragonFly BSD source repository

More information about the Commits mailing list