cvs commit: src/sys/vfs/nfs nfs.h nfs_nqlease.c nfs_socket.c

Matthew Dillon dillon at
Mon Feb 20 20:50:06 PST 2006

dillon      2006/02/20 20:47:56 PST

DragonFly src repository

  Modified files:
    sys/vfs/nfs          nfs.h nfs_nqlease.c nfs_socket.c 
  Fix a bunch of race cases in the NFS callout timer code, in the handling
  of the NFS request queue and, in the handling of R_SENT.
  The NFS stack can block in the callout timer code's request queue loop,
  possibly resulting in another process ripping the current request in the
  TAILQ_FOREACH scan out from under the loop.
  R_MASKTIMER was being cleared too early, potentially allowing the callout
  timer code to modify a request at the same time mainline code was working
  on the same request synchronously.
  The R_SENT bit would sometimes get set after the request had completed, or
  get set twice, causing nmp->nm_sent to 'stick' and never return to 0.  This
  in turn would stop the NFS retry code dead in its tracks and cause the NFS
  mount to hang.
  Reported-by: Stefan Krueger <skrueger at xxxxxxxxxxxxxxxx>
  Testing-by: Stefan Krueger <skrueger at xxxxxxxxxxxxxxxx>
  Also-thanks-to: Peter Holms filesystem and load testing suite (stress2).
  Revision  Changes    Path
  1.12      +1 -0      src/sys/vfs/nfs/nfs.h
  1.28      +2 -3      src/sys/vfs/nfs/nfs_nqlease.c
  1.31      +128 -80   src/sys/vfs/nfs/nfs_socket.c

More information about the Commits mailing list