DragonFly commits List (threaded) for 2010-10
git: kernel - Fix NFS client & server bugs
Author: Matthew Dillon <email@example.com>
Date: Sun Oct 17 21:48:47 2010 -0700
kernel - Fix NFS client & server bugs
* A very long standing bug in the server cache was finally whacked. The
write-gather code was improperly returning the wrong mbuf for the server
to reply with, causing client stalls. This behavior depends on the client
doing burst asynchronous writes. Newer releases of DragonFly do burst
asynchronous writes but older ones tended not to.
* The server cache was not MPSAFE. Add a MP token to fix that.
* Remove critical sectons from the server cache which are no longer needed.
* Fix a potential client-side rpc request race where a request's
NEEDSXMIT flag is not set until after the request possibly blocks,
which can lead to issues if another thread picks up the request
and then believes that it has already been transmitted when it
* Document a big problem with NFSv2 and HAMMER-served directories. NFSv2
only has 32-bit directory cookies. It is possible to work around the
problem by using rdirplus (which is the default now). However, some
servers may not be able to handle rdirplus with a NFSv2 mount.
Users who need to serve out NFSv2 cannot serve HAMMER directories
with NFSv2 unless the clients support rdirplus.
Our defaults are NFSv3 and rdirplus and NFSv3 does NOT have this problem.
Reported-by: Thomas Nikolajsen <firstname.lastname@example.org>
Summary of changes:
sys/vfs/nfs/nfs_bio.c | 3 +--
sys/vfs/nfs/nfs_serv.c | 29 ++++++++++++-----------------
sys/vfs/nfs/nfs_socket.c | 16 +++++++---------
sys/vfs/nfs/nfs_srvcache.c | 18 +++++++++++++++---
sys/vfs/nfs/nfs_vfsops.c | 21 ++++++++++++++++++---
sys/vfs/nfs/nfs_vnops.c | 9 ++++++++-
6 files changed, 61 insertions(+), 35 deletions(-)
DragonFly BSD source repository