git: kernel - Fix NFS stall and likely also x86-64 seg-fault issue

Matthew Dillon dillon at crater.dragonflybsd.org
Sat Nov 27 22:45:28 PST 2010


commit 4b16aa8469a814628eea6f791dad4a9f50ae6413
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sat Nov 27 22:20:04 2010 -0800

    kernel - Fix NFS stall and likely also x86-64 seg-fault issue
    
    * The nfs node hash code was not MPSAFE due to its use of a global
      hash table.  This could lead to a stall condition due to the
      global hash table losing track of its manual lock.  For now use a
      token to interlock hash table access and replace the manual lock
      with a lockmgr lock.
    
    * This appears to have also fixed the long-standing random seg-fault
      issue with x86-64, where a buildworld loop would seg-fault every once
      in a while for no apparent reason.  /usr/src on my test box has always
      been NFS mounted but was never considered a possible contributor to
      the problem.
    
      If NFS loses track of related nfs nodes or races operations on underlying
      vnodes while expecting their storage to remain stable it is possible
      for a random vnode to become corrupt.  How this could translate to a
      completely random seg-fault is not entirely understood but I surmise
      the unrelated cc1's binary mmap could become corrupt.
    
    Reported-by: Thomas Nikolajsen <thomas.nikolajsen at mail.dk> (nfs issue)

Summary of changes:
 sys/vfs/nfs/nfs_node.c |   63 ++++++++++++++++++++++--------------------------
 1 files changed, 29 insertions(+), 34 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/4b16aa8469a814628eea6f791dad4a9f50ae6413


-- 
DragonFly BSD source repository





More information about the Commits mailing list