git: kernel - namecache eviction fixes

Matthew Dillon dillon at crater.dragonflybsd.org
Fri Jun 10 21:46:29 PDT 2022


commit 1201253bc42e75739a2edeb64973c84d2527a57c
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Fri Jun 10 21:38:37 2022 -0700

    kernel - namecache eviction fixes
    
    * Fix several namecache eviction issues which interfere with nlookup*()
      functions.
    
      There is an optimization where nlookup*() avoids locking intermediate
      ncp's in a path whenever possible on the assumption that the ref on
      the ncp will prevent eviction.  This assumption fails when the machine
      is under a heavy namecache load.
    
      Errors included spurious ENOTCONN and EINVAL error codes from file
      operations.
    
    * Refactor the namecache code to not evict resolved namecache entries
      which have extra refs under normal operation.  This allows nlookup*()
      and other functions to operate semi-lockless for intermediate elements
      in a path.  However, they still obtain a ref which is a cache-unfriendly
      atomic operation.
    
      This fixes numerous weird errors that occur during heavy dsynth bulk
      builds.
    
    * Also fix a bug which evicted too many resolved namecache entries when
      attempting to evict unresolved entries.  This should improve performance
      under heavy namecache loads a bit.

Summary of changes:
 sys/kern/vfs_cache.c   | 411 +++++++++++++++++++++++++++++++++++++++----------
 sys/kern/vfs_nlookup.c |  67 ++++++--
 sys/sys/namecache.h    |   4 +
 3 files changed, 388 insertions(+), 94 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/1201253bc42e75739a2edeb64973c84d2527a57c


-- 
DragonFly BSD source repository



More information about the Commits mailing list