git: kernel - Fix NFS client & server bugs
Matthew Dillon
dillon at crater.dragonflybsd.org
Sun Oct 17 22:20:53 PDT 2010
commit 5e6f1ca5638786e461bf6ef12bbce88f52fdabb1
Author: Matthew Dillon <dillon at apollo.backplane.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
has not.
* 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 <thomas.nikolajsen at mail.dk>
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(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/5e6f1ca5638786e461bf6ef12bbce88f52fdabb1
--
DragonFly BSD source repository
More information about the Commits
mailing list