Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Mar 2009 18:41:06 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r189639 - head/sys/nfsclient
Message-ID:  <200903101841.n2AIf6si070377@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Tue Mar 10 18:41:06 2009
New Revision: 189639
URL: http://svn.freebsd.org/changeset/base/189639

Log:
  - Remove code to set SAVENAME for CREATE or RENAME requests that get a -ve
    hit in the name cache.  cache_lookup() doesn't actually return ENOENT
    for such requests to force the filesystem to do an explicit lookup, so
    this was effectively dead code.
  - Grab the nfsnode mutex while writing to n_dmtime.  We don't grab the lock
    when comparing the time against the cached directory mod time (just as
    we don't when comparing ctime's for +ve name cache hits) since the
    attribute caching is already racy for NFS clients as it is.
  
  Discussed with:	bde

Modified:
  head/sys/nfsclient/nfs_vnops.c

Modified: head/sys/nfsclient/nfs_vnops.c
==============================================================================
--- head/sys/nfsclient/nfs_vnops.c	Tue Mar 10 18:16:03 2009	(r189638)
+++ head/sys/nfsclient/nfs_vnops.c	Tue Mar 10 18:41:06 2009	(r189639)
@@ -923,14 +923,12 @@ nfs_lookup(struct vop_lookup_args *ap)
 		if (VOP_GETATTR(dvp, &vattr, cnp->cn_cred) == 0 &&
 		    vattr.va_mtime.tv_sec == np->n_dmtime) {
 			nfsstats.lookupcache_hits++;
-			if ((cnp->cn_nameiop == CREATE ||
-			    cnp->cn_nameiop == RENAME) &&
-			    (flags & ISLASTCN))
-				cnp->cn_flags |= SAVENAME;
 			return (ENOENT);
 		}
 		cache_purge_negative(dvp);
+		mtx_lock(&np->n_mtx);
 		np->n_dmtime = 0;
+		mtx_unlock(&np->n_mtx);
 	}
 	error = 0;
 	newvp = NULLVP;
@@ -1041,8 +1039,10 @@ nfsmout:
 			 * name cache entry for this directory was
 			 * added.
 			 */
+			mtx_lock(&np->n_mtx);
 			if (np->n_dmtime == 0)
 				np->n_dmtime = np->n_vattr.va_mtime.tv_sec;
+			mtx_unlock(&np->n_mtx);
 			cache_enter(dvp, NULL, cnp);
 		}
 		return (ENOENT);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903101841.n2AIf6si070377>