git: kernel - check nc_generation in nlookup path

Matthew Dillon dillon at crater.dragonflybsd.org
Sun Jul 3 22:28:40 PDT 2022


commit 417b10864204d0b13caea9c2d7bc7f35c004600a
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sun Jul 3 20:47:32 2022 -0700

    kernel - check nc_generation in nlookup path
    
    * With nc_generation now operating in a more usable manner, we can
      use it in nlookup() to check for changes.  When a change is detected,
      the related lock will be cycled and the entire nlookup() will retry up
      to debug.nlookup_max_retries, which currently defaults to 4.
    
    * Add debugging via debug.nlookup_debug.  Set to 3 for nc_generation
      debugging.
    
    * Move "Parent directory lost" kprintfs into a debugging conditional,
      reported via (debug.nlookup_debug & 4).
    
    * This fixes lookup/remove races which could sometimes cause open()
      and other system calls to return EINVAL or ENOTCONN.  Basically
      what happened was that nlookup() wound up on a NCF_DESTROYED entry.
    
    * A few minutes worth of a dsynth bulk does not report any random
      generation number mismatches or retries, so the code in this commit
      is probably very close to correct.

Summary of changes:
 sys/kern/vfs_cache.c    |  39 ++++++---
 sys/kern/vfs_nlookup.c  | 229 +++++++++++++++++++++++++++++++++++-------------
 sys/kern/vfs_syscalls.c |  10 ++-
 sys/kern/vfs_vnops.c    |   3 +
 sys/sys/namecache.h     |   2 +-
 5 files changed, 210 insertions(+), 73 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/417b10864204d0b13caea9c2d7bc7f35c004600a


-- 
DragonFly BSD source repository


More information about the Commits mailing list