Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Jan 2009 14:00:44 +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-6@freebsd.org
Subject:   svn commit: r186861 - in stable/6/sys: . kern
Message-ID:  <200901071400.n07E0ikM087772@svn.freebsd.org>

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

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.

Modified:
  stable/6/sys/   (props changed)
  stable/6/sys/kern/vfs_cache.c

Modified: stable/6/sys/kern/vfs_cache.c
==============================================================================
--- stable/6/sys/kern/vfs_cache.c	Wed Jan  7 12:44:03 2009	(r186860)
+++ stable/6/sys/kern/vfs_cache.c	Wed Jan  7 14:00:44 2009	(r186861)
@@ -526,28 +526,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;
 		}
 	}
 
@@ -565,7 +555,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?200901071400.n07E0ikM087772>