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