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 17:32:26 +0000 (09:32 -0800)
commitbe22aeec2a5c5fab039ec9f8cbd2e3436851d28d
tree3306b728f6bf9d1f45c8216c87cf2ca9408c3347
parent3730eb0ba85c1be539aa4917aeefaa78f00a8946
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