git: kernel - Refactor cache_vref() using counter trick

Matthew Dillon dillon at
Tue Mar 3 19:39:36 PST 2020

commit 4acc6b1f72408fa1ceb43b9aeba14860e49fa253
Author: Matthew Dillon <dillon at>
Date:   Tue Mar 3 19:35:59 2020 -0800

    kernel - Refactor cache_vref() using counter trick
    * Refactor cache_vref() such that it is able to validate that a vnode
      (whos ref count might be 0) is not in VRECLAIM, without acquiring the
      vnode lock.  This is the normal case.
      If cache_vref() is unable to do this, it backs down to the old method
      which was to get a vnode lock, validate that the vnode is not in
      VRECLAIM, then release the lock.
    * NOTE: In DragonFlyBSD, holding a vref on a vnode (vref, NOT vhold) will
      prevent the vnode from transitioning to VRECLAIM.
    * Use the new feature for nlookup's naccess() tests and for the *stat*()
      series of system calls.
      This significantly increases performance.  However, we are not entirely
      cache-contention free as both the namecache entry and the vnode are still
      referenced, requiring atomic adds.

Summary of changes:
 sys/kern/vfs_cache.c    | 38 ++++++++++++++++++++++++++++++++++++--
 sys/kern/vfs_lock.c     |  7 +++++++
 sys/kern/vfs_nlookup.c  |  4 ++--
 sys/kern/vfs_syscalls.c | 15 ++++++++++++++-
 sys/sys/vnode.h         |  1 +
 5 files changed, 60 insertions(+), 5 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list