svn commit: r299207 - in stable/9/sys/fs: nfs nfsclient
Rick Macklem
rmacklem at FreeBSD.org
Fri May 6 23:55:29 UTC 2016
Author: rmacklem
Date: Fri May 6 23:55:28 2016
New Revision: 299207
URL: https://svnweb.freebsd.org/changeset/base/299207
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/9/sys/fs/nfs/nfsport.h
stable/9/sys/fs/nfsclient/nfs_clrpcops.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/fs/ (props changed)
Modified: stable/9/sys/fs/nfs/nfsport.h
==============================================================================
--- stable/9/sys/fs/nfs/nfsport.h Fri May 6 23:49:10 2016 (r299206)
+++ stable/9/sys/fs/nfs/nfsport.h Fri May 6 23:55:28 2016 (r299207)
@@ -706,12 +706,14 @@ MALLOC_DECLARE(M_NEWNFSDROLLBACK);
/*
* 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/9/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- stable/9/sys/fs/nfsclient/nfs_clrpcops.c Fri May 6 23:49:10 2016 (r299206)
+++ stable/9/sys/fs/nfsclient/nfs_clrpcops.c Fri May 6 23:55:28 2016 (r299207)
@@ -1618,7 +1618,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;
More information about the svn-src-stable-9
mailing list