kernel - Fix NFS stall and likely also x86-64 seg-fault issue
authorMatthew Dillon <dillon@apollo.backplane.com>
Sun, 28 Nov 2010 06:20:04 +0000 (22:20 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sun, 28 Nov 2010 06:20:04 +0000 (22:20 -0800)
commit4b16aa8469a814628eea6f791dad4a9f50ae6413
treee75e881dde47257c601e47a9fe15be0cf97d65b5
parent1b26f062fbcec866b5f2f7c2ff9d32270bd68eb0
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@mail.dk> (nfs issue)
sys/vfs/nfs/nfs_node.c