Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Jan 2009 12:44:03 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
Subject:   svn commit: r186860 - in stable/7/sys: . contrib/pf dev/cxgb kern
Message-ID:  <200901071244.n07Ci3RI086090@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Wed Jan  7 12:44:03 2009
New Revision: 186860
URL: http://svn.freebsd.org/changeset/base/186860

Log:
  MFC r186600:
  In r185557, the check for existing negative entry for the given name
  did not compared nc_dvp with supplied parent directory vnode pointer.
  Add the check and note that now branches for vp != NULL and vp == NULL
  are the same, thus can be merged.
  
  Tested by:	kensmith

Modified:
  stable/7/sys/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)
  stable/7/sys/dev/cxgb/   (props changed)
  stable/7/sys/kern/vfs_cache.c

Modified: stable/7/sys/kern/vfs_cache.c
==============================================================================
--- stable/7/sys/kern/vfs_cache.c	Wed Jan  7 12:38:31 2009	(r186859)
+++ stable/7/sys/kern/vfs_cache.c	Wed Jan  7 12:44:03 2009	(r186860)
@@ -511,28 +511,18 @@ cache_enter(dvp, vp, cnp)
 	CACHE_LOCK();
 
 	/*
-	 * See if this vnode is already in the cache with this name.
-	 * This can happen with concurrent lookups of the same path
-	 * name.
+	 * See if this vnode or negative entry is already in the cache
+	 * with this name.  This can happen with concurrent lookups of
+	 * the same path name.
 	 */
-	if (vp) {
-		TAILQ_FOREACH(n2, &vp->v_cache_dst, nc_dst) {
-			if (n2->nc_dvp == dvp &&
-			    n2->nc_nlen == cnp->cn_namelen &&
-			    !bcmp(n2->nc_name, cnp->cn_nameptr, n2->nc_nlen)) {
-				CACHE_UNLOCK();
-				cache_free(ncp);
-				return;
-			}
-		}
-	} else {
-		TAILQ_FOREACH(n2, &ncneg, nc_dst) {
-			if (n2->nc_nlen == cnp->cn_namelen &&
-			    !bcmp(n2->nc_name, cnp->cn_nameptr, n2->nc_nlen)) {
-				CACHE_UNLOCK();
-				cache_free(ncp);
-				return;
-			}
+	ncpp = NCHHASH(hash);
+	LIST_FOREACH(n2, ncpp, nc_hash) {
+		if (n2->nc_dvp == dvp &&
+		    n2->nc_nlen == cnp->cn_namelen &&
+		    !bcmp(n2->nc_name, cnp->cn_nameptr, n2->nc_nlen)) {
+			CACHE_UNLOCK();
+			cache_free(ncp);
+			return;
 		}
 	}
 
@@ -550,7 +540,6 @@ cache_enter(dvp, vp, cnp)
 	 * Insert the new namecache entry into the appropriate chain
 	 * within the cache entries table.
 	 */
-	ncpp = NCHHASH(hash);
 	LIST_INSERT_HEAD(ncpp, ncp, nc_hash);
 	if (LIST_EMPTY(&dvp->v_cache_src)) {
 		hold = 1;



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