Author: rmacklem
Date: Fri May  6 23:44:24 2016
New Revision: 299204
URL: https://svnweb.freebsd.org/changeset/base/299204

Log:
  MFC: r297837
  Bruce Evans reported that there was a performance regression between
  the old and new NFS clients. He did a good job of isolating the problem
  which was caused by the new NFS client not setting the post write mtime
  correctly. The new NFS client code was cloned from the old client, but
  was incorrect, because the mtime in the nfs vnode's cache wasn't yet
  updated. This patch fixes this problem. The patch also adds missing mutex
  locking.

Modified:
  stable/10/sys/fs/nfs/nfsport.h
  stable/10/sys/fs/nfsclient/nfs_clrpcops.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/fs/nfs/nfsport.h
==============================================================================
--- stable/10/sys/fs/nfs/nfsport.h      Fri May  6 23:40:37 2016        
(r299203)
+++ stable/10/sys/fs/nfs/nfsport.h      Fri May  6 23:44:24 2016        
(r299204)
@@ -787,12 +787,14 @@ MALLOC_DECLARE(M_NEWNFSDSESSION);
 /*
  * Set the n_time in the client write rpc, as required.
  */
-#define        NFSWRITERPC_SETTIME(w, n, v4)                                   
\
+#define        NFSWRITERPC_SETTIME(w, n, a, v4)                                
\
        do {                                                            \
                if (w) {                                                \
-                       (n)->n_mtime = (n)->n_vattr.na_vattr.va_mtime; \
+                       mtx_lock(&((n)->n_mtx));                        \
+                       (n)->n_mtime = (a)->na_mtime;                   \
                        if (v4)                                         \
-                           (n)->n_change = (n)->n_vattr.na_vattr.va_filerev; \
+                               (n)->n_change = (a)->na_filerev;        \
+                       mtx_unlock(&((n)->n_mtx));                      \
                }                                                       \
        } while (0)
 

Modified: stable/10/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- stable/10/sys/fs/nfsclient/nfs_clrpcops.c   Fri May  6 23:40:37 2016        
(r299203)
+++ stable/10/sys/fs/nfsclient/nfs_clrpcops.c   Fri May  6 23:44:24 2016        
(r299204)
@@ -1731,7 +1731,7 @@ nfsrpc_writerpc(vnode_t vp, struct uio *
                }
                if (error)
                        goto nfsmout;
-               NFSWRITERPC_SETTIME(wccflag, np, (nd->nd_flag & ND_NFSV4));
+               NFSWRITERPC_SETTIME(wccflag, np, nap, (nd->nd_flag & ND_NFSV4));
                mbuf_freem(nd->nd_mrep);
                nd->nd_mrep = NULL;
                tsiz -= len;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to