Module Name:    src
Committed By:   dholland
Date:           Mon Nov  5 17:27:40 UTC 2012

Modified Files:
        src/sys/fs/adosfs: adlookup.c
        src/sys/fs/cd9660: cd9660_lookup.c
        src/sys/fs/efs: efs_vnops.c
        src/sys/fs/filecorefs: filecore_lookup.c
        src/sys/fs/msdosfs: msdosfs_lookup.c
        src/sys/fs/nilfs: nilfs_vnops.c
        src/sys/fs/ntfs: ntfs_vnops.c
        src/sys/fs/puffs: puffs_msgif.c puffs_node.c puffs_vnops.c
        src/sys/fs/smbfs: smbfs_vnops.c
        src/sys/fs/tmpfs: tmpfs_vnops.c
        src/sys/fs/udf: udf_vnops.c
        src/sys/fs/unionfs: unionfs_vnops.c
        src/sys/kern: vfs_cache.c
        src/sys/nfs: nfs_vnops.c
        src/sys/sys: namei.src
        src/sys/ufs/chfs: chfs_vnops.c
        src/sys/ufs/ext2fs: ext2fs_lookup.c
        src/sys/ufs/ufs: ufs_lookup.c

Log Message:
Excise struct componentname from the namecache.

This uglifies the interface, because several operations need to be
passed the namei flags and cache_lookup also needs for the time being
to be passed cnp->cn_nameiop. Nonetheless, it's a net benefit.

The glop should be able to go away eventually but requires structural
cleanup elsewhere first.

This change requires a kernel bump.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/fs/adosfs/adlookup.c
cvs rdiff -u -r1.21 -r1.22 src/sys/fs/cd9660/cd9660_lookup.c
cvs rdiff -u -r1.27 -r1.28 src/sys/fs/efs/efs_vnops.c
cvs rdiff -u -r1.15 -r1.16 src/sys/fs/filecorefs/filecore_lookup.c
cvs rdiff -u -r1.25 -r1.26 src/sys/fs/msdosfs/msdosfs_lookup.c
cvs rdiff -u -r1.19 -r1.20 src/sys/fs/nilfs/nilfs_vnops.c
cvs rdiff -u -r1.53 -r1.54 src/sys/fs/ntfs/ntfs_vnops.c
cvs rdiff -u -r1.92 -r1.93 src/sys/fs/puffs/puffs_msgif.c
cvs rdiff -u -r1.27 -r1.28 src/sys/fs/puffs/puffs_node.c
cvs rdiff -u -r1.175 -r1.176 src/sys/fs/puffs/puffs_vnops.c
cvs rdiff -u -r1.81 -r1.82 src/sys/fs/smbfs/smbfs_vnops.c
cvs rdiff -u -r1.99 -r1.100 src/sys/fs/tmpfs/tmpfs_vnops.c
cvs rdiff -u -r1.73 -r1.74 src/sys/fs/udf/udf_vnops.c
cvs rdiff -u -r1.6 -r1.7 src/sys/fs/unionfs/unionfs_vnops.c
cvs rdiff -u -r1.90 -r1.91 src/sys/kern/vfs_cache.c
cvs rdiff -u -r1.296 -r1.297 src/sys/nfs/nfs_vnops.c
cvs rdiff -u -r1.28 -r1.29 src/sys/sys/namei.src
cvs rdiff -u -r1.12 -r1.13 src/sys/ufs/chfs/chfs_vnops.c
cvs rdiff -u -r1.71 -r1.72 src/sys/ufs/ext2fs/ext2fs_lookup.c
cvs rdiff -u -r1.119 -r1.120 src/sys/ufs/ufs/ufs_lookup.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/adosfs/adlookup.c
diff -u src/sys/fs/adosfs/adlookup.c:1.17 src/sys/fs/adosfs/adlookup.c:1.18
--- src/sys/fs/adosfs/adlookup.c:1.17	Mon Nov  5 17:24:09 2012
+++ src/sys/fs/adosfs/adlookup.c	Mon Nov  5 17:27:37 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: adlookup.c,v 1.17 2012/11/05 17:24:09 dholland Exp $	*/
+/*	$NetBSD: adlookup.c,v 1.18 2012/11/05 17:27:37 dholland Exp $	*/
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: adlookup.c,v 1.17 2012/11/05 17:24:09 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: adlookup.c,v 1.18 2012/11/05 17:27:37 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -110,7 +110,8 @@ adosfs_lookup(void *v)
 	 * check the name cache to see if the directory/name pair
 	 * we are looking for is known already.
 	 */
-	if (cache_lookup(vdp, cnp, NULL, vpp)) {
+	if (cache_lookup(vdp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, vpp)) {
 		return *vpp == NULLVP ? ENOENT : 0;
 	}
 
@@ -212,7 +213,8 @@ adosfs_lookup(void *v)
 		return(EJUSTRETURN);
 	}
 	if (nameiop != CREATE)
-		cache_enter(vdp, NULL, cnp);
+		cache_enter(vdp, NULL, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 #ifdef ADOSFS_DIAGNOSTIC
 	printf("ENOENT)");
 #endif
@@ -242,7 +244,8 @@ found:
 		vref(vdp);
 found_lockdone:
 	if (nocache == 0)
-		cache_enter(vdp, *vpp, cnp);
+		cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 
 #ifdef ADOSFS_DIAGNOSTIC
 	printf("0)\n");

Index: src/sys/fs/cd9660/cd9660_lookup.c
diff -u src/sys/fs/cd9660/cd9660_lookup.c:1.21 src/sys/fs/cd9660/cd9660_lookup.c:1.22
--- src/sys/fs/cd9660/cd9660_lookup.c:1.21	Mon Nov  5 17:24:09 2012
+++ src/sys/fs/cd9660/cd9660_lookup.c	Mon Nov  5 17:27:37 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd9660_lookup.c,v 1.21 2012/11/05 17:24:09 dholland Exp $	*/
+/*	$NetBSD: cd9660_lookup.c,v 1.22 2012/11/05 17:27:37 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1989, 1993, 1994
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd9660_lookup.c,v 1.21 2012/11/05 17:24:09 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd9660_lookup.c,v 1.22 2012/11/05 17:27:37 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/namei.h>
@@ -151,7 +151,8 @@ cd9660_lookup(void *v)
 	 * check the name cache to see if the directory/name pair
 	 * we are looking for is known already.
 	 */
-	if (cache_lookup(vdp, cnp, NULL, vpp)) {
+	if (cache_lookup(vdp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, vpp)) {
 		return *vpp == NULLVP ? ENOENT : 0;
 	}
 
@@ -337,7 +338,7 @@ notfound:
 	/*
 	 * Insert name into cache (as non-existent) if appropriate.
 	 */
-	cache_enter(vdp, *vpp, cnp);
+	cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen, cnp->cn_flags);
 	return (nameiop == CREATE || nameiop == RENAME) ? EROFS : ENOENT;
 
 found:
@@ -400,7 +401,7 @@ found:
 	/*
 	 * Insert name into cache if appropriate.
 	 */
-	cache_enter(vdp, *vpp, cnp);
+	cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen, cnp->cn_flags);
 	return 0;
 }
 

Index: src/sys/fs/efs/efs_vnops.c
diff -u src/sys/fs/efs/efs_vnops.c:1.27 src/sys/fs/efs/efs_vnops.c:1.28
--- src/sys/fs/efs/efs_vnops.c:1.27	Mon Nov  5 17:24:09 2012
+++ src/sys/fs/efs/efs_vnops.c	Mon Nov  5 17:27:37 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: efs_vnops.c,v 1.27 2012/11/05 17:24:09 dholland Exp $	*/
+/*	$NetBSD: efs_vnops.c,v 1.28 2012/11/05 17:27:37 dholland Exp $	*/
 
 /*
  * Copyright (c) 2006 Stephen M. Rumble <rum...@ephemeral.org>
@@ -17,7 +17,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: efs_vnops.c,v 1.27 2012/11/05 17:24:09 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: efs_vnops.c,v 1.28 2012/11/05 17:27:37 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -73,7 +73,8 @@ efs_lookup(void *v)
 	if (err)
 		return (err);
 
-	if (cache_lookup(ap->a_dvp, cnp, NULL, ap->a_vpp)) {
+	if (cache_lookup(ap->a_dvp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, ap->a_vpp)) {
 		return *ap->a_vpp == NULLVP ? ENOENT : 0;
 	}
 
@@ -103,7 +104,8 @@ efs_lookup(void *v)
 		    EFS_VTOI(ap->a_dvp), ap->a_cnp, &ino);
 		if (err) {
 			if (err == ENOENT && nameiop != CREATE)
-				cache_enter(ap->a_dvp, NULL, cnp);
+				cache_enter(ap->a_dvp, NULL, cnp->cn_nameptr,
+					    cnp->cn_namelen, cnp->cn_flags);
 			if (err == ENOENT && (nameiop == CREATE ||
 			    nameiop == RENAME)) {
 				err = VOP_ACCESS(ap->a_dvp, VWRITE,
@@ -120,7 +122,8 @@ efs_lookup(void *v)
 		*ap->a_vpp = vp;
 	}
 
-	cache_enter(ap->a_dvp, *ap->a_vpp, cnp);
+	cache_enter(ap->a_dvp, *ap->a_vpp, cnp->cn_nameptr, cnp->cn_namelen,
+		    cnp->cn_flags);
 
 	return 0;
 }

Index: src/sys/fs/filecorefs/filecore_lookup.c
diff -u src/sys/fs/filecorefs/filecore_lookup.c:1.15 src/sys/fs/filecorefs/filecore_lookup.c:1.16
--- src/sys/fs/filecorefs/filecore_lookup.c:1.15	Mon Nov  5 17:24:09 2012
+++ src/sys/fs/filecorefs/filecore_lookup.c	Mon Nov  5 17:27:37 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecore_lookup.c,v 1.15 2012/11/05 17:24:09 dholland Exp $	*/
+/*	$NetBSD: filecore_lookup.c,v 1.16 2012/11/05 17:27:37 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1989, 1993, 1994 The Regents of the University of California.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: filecore_lookup.c,v 1.15 2012/11/05 17:24:09 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: filecore_lookup.c,v 1.16 2012/11/05 17:27:37 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/namei.h>
@@ -169,7 +169,8 @@ filecore_lookup(void *v)
 	 * check the name cache to see if the directory/name pair
 	 * we are looking for is known already.
 	 */
-	if (cache_lookup(vdp, cnp, NULL, vpp)) {
+	if (cache_lookup(vdp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, vpp)) {
 		return *vpp == NULLVP ? ENOENT : 0;
 	}
 
@@ -247,7 +248,8 @@ notfound:
 	/*
 	 * Insert name into cache (as non-existent) if appropriate.
 	 */
-	cache_enter(vdp, *vpp, cnp);
+	cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+		    cnp->cn_flags);
 	return (nameiop == CREATE || nameiop == RENAME) ? EROFS : ENOENT;
 
 found:
@@ -315,6 +317,7 @@ found:
 	/*
 	 * Insert name into cache if appropriate.
 	 */
-	cache_enter(vdp, *vpp, cnp);
+	cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+		    cnp->cn_flags);
 	return 0;
 }

Index: src/sys/fs/msdosfs/msdosfs_lookup.c
diff -u src/sys/fs/msdosfs/msdosfs_lookup.c:1.25 src/sys/fs/msdosfs/msdosfs_lookup.c:1.26
--- src/sys/fs/msdosfs/msdosfs_lookup.c:1.25	Mon Nov  5 17:24:10 2012
+++ src/sys/fs/msdosfs/msdosfs_lookup.c	Mon Nov  5 17:27:37 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: msdosfs_lookup.c,v 1.25 2012/11/05 17:24:10 dholland Exp $	*/
+/*	$NetBSD: msdosfs_lookup.c,v 1.26 2012/11/05 17:27:37 dholland Exp $	*/
 
 /*-
  * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: msdosfs_lookup.c,v 1.25 2012/11/05 17:24:10 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_lookup.c,v 1.26 2012/11/05 17:27:37 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -146,7 +146,8 @@ msdosfs_lookup(void *v)
 	 * check the name cache to see if the directory/name pair
 	 * we are looking for is known already.
 	 */
-	if (cache_lookup(vdp, cnp, NULL, vpp)) {
+	if (cache_lookup(vdp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, vpp)) {
 		return *vpp == NULLVP ? ENOENT: 0;
 	}
 
@@ -401,7 +402,8 @@ notfound:
 	 * for 'FOO'.
 	 */
 	if (nameiop != CREATE)
-		cache_enter(vdp, *vpp, cnp);
+		cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 #endif
 
 	return (ENOENT);
@@ -554,7 +556,7 @@ foundroot:
 	/*
 	 * Insert name into cache if appropriate.
 	 */
-	cache_enter(vdp, *vpp, cnp);
+	cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen, cnp->cn_flags);
 
 	return 0;
 }

Index: src/sys/fs/nilfs/nilfs_vnops.c
diff -u src/sys/fs/nilfs/nilfs_vnops.c:1.19 src/sys/fs/nilfs/nilfs_vnops.c:1.20
--- src/sys/fs/nilfs/nilfs_vnops.c:1.19	Mon Nov  5 17:24:10 2012
+++ src/sys/fs/nilfs/nilfs_vnops.c	Mon Nov  5 17:27:37 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: nilfs_vnops.c,v 1.19 2012/11/05 17:24:10 dholland Exp $ */
+/* $NetBSD: nilfs_vnops.c,v 1.20 2012/11/05 17:27:37 dholland Exp $ */
 
 /*
  * Copyright (c) 2008, 2009 Reinoud Zandijk
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.19 2012/11/05 17:24:10 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.20 2012/11/05 17:27:37 dholland Exp $");
 #endif /* not lint */
 
 
@@ -653,7 +653,8 @@ nilfs_lookup(void *v)
 	DPRINTF(LOOKUP, ("\tlooking up cnp->cn_nameptr '%s'\n",
 	    cnp->cn_nameptr));
 	/* look in the namecache */
-	if (cache_lookup(dvp, cnp, NULL, vpp)) {
+	if (cache_lookup(dvp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, vpp)) {
 		return *vpp == NULLVP ? ENOENT : 0;
 	}
 
@@ -761,7 +762,8 @@ out:
 	 * might be seen as negative caching.
 	 */
 	if (nameiop != CREATE)
-		cache_enter(dvp, *vpp, cnp);
+		cache_enter(dvp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 
 	DPRINTFIF(LOOKUP, error, ("nilfs_lookup returing error %d\n", error));
 

Index: src/sys/fs/ntfs/ntfs_vnops.c
diff -u src/sys/fs/ntfs/ntfs_vnops.c:1.53 src/sys/fs/ntfs/ntfs_vnops.c:1.54
--- src/sys/fs/ntfs/ntfs_vnops.c:1.53	Mon Nov  5 17:24:10 2012
+++ src/sys/fs/ntfs/ntfs_vnops.c	Mon Nov  5 17:27:38 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ntfs_vnops.c,v 1.53 2012/11/05 17:24:10 dholland Exp $	*/
+/*	$NetBSD: ntfs_vnops.c,v 1.54 2012/11/05 17:27:38 dholland Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.53 2012/11/05 17:24:10 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.54 2012/11/05 17:27:38 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -682,7 +682,8 @@ ntfs_lookup(void *v)
 	 * check the name cache to see if the directory/name pair
 	 * we are looking for is known already.
 	 */
-	if (cache_lookup(ap->a_dvp, cnp, NULL, ap->a_vpp)) {
+	if (cache_lookup(ap->a_dvp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, ap->a_vpp)) {
 		return *ap->a_vpp == NULLVP ? ENOENT : 0;
 	}
 
@@ -726,7 +727,8 @@ ntfs_lookup(void *v)
 		    (unsigned long long)VTONT(*ap->a_vpp)->i_number));
 	}
 
-	cache_enter(dvp, *ap->a_vpp, cnp);
+	cache_enter(dvp, *ap->a_vpp, cnp->cn_nameptr, cnp->cn_namelen,
+		    cnp->cn_flags);
 
 	return error;
 }

Index: src/sys/fs/puffs/puffs_msgif.c
diff -u src/sys/fs/puffs/puffs_msgif.c:1.92 src/sys/fs/puffs/puffs_msgif.c:1.93
--- src/sys/fs/puffs/puffs_msgif.c:1.92	Fri Jul 27 07:38:44 2012
+++ src/sys/fs/puffs/puffs_msgif.c	Mon Nov  5 17:27:38 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_msgif.c,v 1.92 2012/07/27 07:38:44 manu Exp $	*/
+/*	$NetBSD: puffs_msgif.c,v 1.93 2012/11/05 17:27:38 dholland Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_msgif.c,v 1.92 2012/07/27 07:38:44 manu Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_msgif.c,v 1.93 2012/11/05 17:27:38 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -915,7 +915,7 @@ puffsop_flush(struct puffs_mount *pmp, s
 			rv = EINVAL;
 			break;
 		}
-		cache_purge1(vp, NULL, PURGE_CHILDREN);
+		cache_purge1(vp, NULL, 0, PURGE_CHILDREN);
 		break;
 
 	case PUFFS_INVAL_PAGECACHE_NODE_RANGE:

Index: src/sys/fs/puffs/puffs_node.c
diff -u src/sys/fs/puffs/puffs_node.c:1.27 src/sys/fs/puffs/puffs_node.c:1.28
--- src/sys/fs/puffs/puffs_node.c:1.27	Mon Jul 23 19:06:10 2012
+++ src/sys/fs/puffs/puffs_node.c	Mon Nov  5 17:27:38 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_node.c,v 1.27 2012/07/23 19:06:10 manu Exp $	*/
+/*	$NetBSD: puffs_node.c,v 1.28 2012/11/05 17:27:38 dholland Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_node.c,v 1.27 2012/07/23 19:06:10 manu Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_node.c,v 1.28 2012/11/05 17:27:38 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/hash.h>
@@ -247,7 +247,8 @@ puffs_newnode(struct mount *mp, struct v
 	*vpp = vp;
 
 	if (PUFFS_USE_NAMECACHE(pmp))
-		cache_enter(dvp, vp, cnp);
+		cache_enter(dvp, vp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 
 	return 0;
 }

Index: src/sys/fs/puffs/puffs_vnops.c
diff -u src/sys/fs/puffs/puffs_vnops.c:1.175 src/sys/fs/puffs/puffs_vnops.c:1.176
--- src/sys/fs/puffs/puffs_vnops.c:1.175	Mon Nov  5 17:24:10 2012
+++ src/sys/fs/puffs/puffs_vnops.c	Mon Nov  5 17:27:38 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_vnops.c,v 1.175 2012/11/05 17:24:10 dholland Exp $	*/
+/*	$NetBSD: puffs_vnops.c,v 1.176 2012/11/05 17:27:38 dholland Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.175 2012/11/05 17:24:10 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.176 2012/11/05 17:27:38 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -528,7 +528,9 @@ puffs_vnop_lookup(void *v)
 	if (!isdot && PUFFS_USE_NAMECACHE(pmp)) {
 		int found, iswhiteout;
 
-		found = cache_lookup(dvp, cnp, &iswhiteout, ap->a_vpp);
+		found = cache_lookup(dvp, cnp->cn_nameptr, cnp->cn_namelen,
+				     cnp->cn_nameiop, cnp->cn_flags,
+				     &iswhiteout, ap->a_vpp);
 		if (iswhiteout) {
 			cnp->cn_flags |= ISWHITEOUT;
 		}
@@ -620,7 +622,8 @@ puffs_vnop_lookup(void *v)
 			} else {
 				if (PUFFS_USE_NAMECACHE(pmp) &&
 				    !PUFFS_USE_FS_TTL(pmp))
-					cache_enter(dvp, NULL, cnp);
+					cache_enter(dvp, NULL, cnp->cn_nameptr,
+						cnp->cn_namelen, cnp->cn_flags);
 			}
 		}
 		goto out;
@@ -696,7 +699,8 @@ puffs_vnop_lookup(void *v)
 	*ap->a_vpp = vp;
 
 	if (PUFFS_USE_NAMECACHE(pmp))
-		cache_enter(dvp, vp, cnp);
+		cache_enter(dvp, vp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 
 	/* XXX */
 	if ((lookup_msg->pvnr_cn.pkcn_flags & REQUIREDIR) == 0)

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.81 src/sys/fs/smbfs/smbfs_vnops.c:1.82
--- src/sys/fs/smbfs/smbfs_vnops.c:1.81	Mon Nov  5 17:24:10 2012
+++ src/sys/fs/smbfs/smbfs_vnops.c	Mon Nov  5 17:27:38 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.81 2012/11/05 17:24:10 dholland Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.82 2012/11/05 17:27:38 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.81 2012/11/05 17:24:10 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.82 2012/11/05 17:27:38 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -596,7 +596,8 @@ smbfs_create(void *v)
 	if (error)
 		goto out;
 
-	cache_enter(dvp, *ap->a_vpp, cnp);
+	cache_enter(dvp, *ap->a_vpp, cnp->cn_nameptr, cnp->cn_namelen,
+		    cnp->cn_flags);
 
   out:
 	VN_KNOTE(dvp, NOTE_WRITE);
@@ -1202,7 +1203,9 @@ smbfs_lookup(void *v)
 	 * the time the cache entry has been created. If it has,
 	 * the cache entry has to be ignored.
 	 */
-	if (cache_lookup(dvp, cnp, NULL, vpp)) {
+	if (cache_lookup(dvp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags,
+			 NULL, vpp)) {
 		struct vattr vattr;
 		struct vnode *newvp;
 
@@ -1291,7 +1294,8 @@ smbfs_lookup(void *v)
 		 * Insert name into cache (as non-existent) if appropriate.
 		 */
 		if (nameiop != CREATE)
-			cache_enter(dvp, *vpp, cnp);
+			cache_enter(dvp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+				    cnp->cn_flags);
 
 		return (ENOENT);
 	}
@@ -1346,11 +1350,13 @@ smbfs_lookup(void *v)
 	KASSERT(error == 0);
 	if (cnp->cn_nameiop != DELETE || !islastcn) {
 		VTOSMB(*vpp)->n_ctime = VTOSMB(*vpp)->n_mtime.tv_sec;
-		cache_enter(dvp, *vpp, cnp);
+		cache_enter(dvp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 #ifdef notdef
 	} else if (error == ENOENT && cnp->cn_nameiop != CREATE) {
 		VTOSMB(*vpp)->n_nctime = VTOSMB(*vpp)->n_mtime.tv_sec;
-		cache_enter(dvp, *vpp, cnp);
+		cache_enter(dvp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 #endif
 	}
 

Index: src/sys/fs/tmpfs/tmpfs_vnops.c
diff -u src/sys/fs/tmpfs/tmpfs_vnops.c:1.99 src/sys/fs/tmpfs/tmpfs_vnops.c:1.100
--- src/sys/fs/tmpfs/tmpfs_vnops.c:1.99	Mon Nov  5 17:24:11 2012
+++ src/sys/fs/tmpfs/tmpfs_vnops.c	Mon Nov  5 17:27:39 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: tmpfs_vnops.c,v 1.99 2012/11/05 17:24:11 dholland Exp $	*/
+/*	$NetBSD: tmpfs_vnops.c,v 1.100 2012/11/05 17:27:39 dholland Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.99 2012/11/05 17:24:11 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.100 2012/11/05 17:27:39 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/dirent.h>
@@ -161,7 +161,9 @@ tmpfs_lookup(void *v)
 	 * Avoid doing a linear scan of the directory if the requested
 	 * directory/name couple is already in the cache.
 	 */
-	cachefound = cache_lookup(dvp, cnp, &iswhiteout, vpp);
+	cachefound = cache_lookup(dvp, cnp->cn_nameptr, cnp->cn_namelen,
+				  cnp->cn_nameiop, cnp->cn_flags,
+				  &iswhiteout, vpp);
 	if (iswhiteout) {
 		cnp->cn_flags |= ISWHITEOUT;
 	}
@@ -286,7 +288,8 @@ done:
 	 * not improve the performance).
 	 */
 	if (cnp->cn_nameiop != CREATE) {
-		cache_enter(dvp, *vpp, cnp);
+		cache_enter(dvp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 	}
 out:
 	KASSERT((*vpp && VOP_ISLOCKED(*vpp)) || error);

Index: src/sys/fs/udf/udf_vnops.c
diff -u src/sys/fs/udf/udf_vnops.c:1.73 src/sys/fs/udf/udf_vnops.c:1.74
--- src/sys/fs/udf/udf_vnops.c:1.73	Mon Nov  5 17:24:11 2012
+++ src/sys/fs/udf/udf_vnops.c	Mon Nov  5 17:27:39 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_vnops.c,v 1.73 2012/11/05 17:24:11 dholland Exp $ */
+/* $NetBSD: udf_vnops.c,v 1.74 2012/11/05 17:27:39 dholland Exp $ */
 
 /*
  * Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -32,7 +32,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.73 2012/11/05 17:24:11 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.74 2012/11/05 17:27:39 dholland Exp $");
 #endif /* not lint */
 
 
@@ -688,7 +688,8 @@ udf_lookup(void *v)
 	DPRINTF(LOOKUP, ("\tlooking up cnp->cn_nameptr '%s'\n",
 	    cnp->cn_nameptr));
 	/* look in the namecache */
-	if (cache_lookup(dvp, cnp, NULL, vpp)) {
+	if (cache_lookup(dvp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, vpp)) {
 		return *vpp == NULLVP ? ENOENT : 0;
 	}
 
@@ -796,7 +797,8 @@ out:
 	 * might be seen as negative caching.
 	 */
 	if (nameiop != CREATE)
-		cache_enter(dvp, *vpp, cnp);
+		cache_enter(dvp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 
 	DPRINTFIF(LOOKUP, error, ("udf_lookup returing error %d\n", error));
 

Index: src/sys/fs/unionfs/unionfs_vnops.c
diff -u src/sys/fs/unionfs/unionfs_vnops.c:1.6 src/sys/fs/unionfs/unionfs_vnops.c:1.7
--- src/sys/fs/unionfs/unionfs_vnops.c:1.6	Sun Jul 22 00:53:21 2012
+++ src/sys/fs/unionfs/unionfs_vnops.c	Mon Nov  5 17:27:39 2012
@@ -143,7 +143,8 @@ unionfs_lookup(void *v)
 			vn_lock(dunp->un_dvp, LK_EXCLUSIVE | LK_RETRY);
 			vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY);
 		} else if (error == ENOENT && nameiop != CREATE)
-			cache_enter(dvp, NULLVP, cnp);
+			cache_enter(dvp, NULLVP, cnp->cn_nameptr,
+				    cnp->cn_namelen, cnp->cn_flags);
 
 		UNIONFS_INTERNAL_DEBUG("unionfs_lookup: leave (%d)\n", error);
 
@@ -268,7 +269,8 @@ unionfs_lookup(void *v)
 
 	*(ap->a_vpp) = vp;
 
-	cache_enter(dvp, vp, cnp);
+	cache_enter(dvp, vp, cnp->cn_nameptr, cnp->cn_namelen,
+		    cnp->cn_flags);
 
 	/* XXXAD lock status on error */
 unionfs_lookup_out:
@@ -278,7 +280,8 @@ unionfs_lookup_out:
 		vrele(lvp);
 
 	if (error == ENOENT && nameiop != CREATE)
-		cache_enter(dvp, NULLVP, cnp);
+		cache_enter(dvp, NULLVP, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 
 	UNIONFS_INTERNAL_DEBUG("unionfs_lookup: leave (%d)\n", error);
 

Index: src/sys/kern/vfs_cache.c
diff -u src/sys/kern/vfs_cache.c:1.90 src/sys/kern/vfs_cache.c:1.91
--- src/sys/kern/vfs_cache.c:1.90	Mon Nov  5 17:24:11 2012
+++ src/sys/kern/vfs_cache.c	Mon Nov  5 17:27:39 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_cache.c,v 1.90 2012/11/05 17:24:11 dholland Exp $	*/
+/*	$NetBSD: vfs_cache.c,v 1.91 2012/11/05 17:27:39 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.90 2012/11/05 17:24:11 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.91 2012/11/05 17:27:39 dholland Exp $");
 
 #include "opt_ddb.h"
 #include "opt_revcache.h"
@@ -161,7 +161,7 @@ static struct evcnt cache_ev_forced;
 
 static void cache_invalidate(struct namecache *);
 static struct namecache *cache_lookup_entry(
-    const struct vnode *, const struct componentname *);
+    const struct vnode *, const char *, size_t);
 static void cache_thread(void *);
 static void cache_invalidate(struct namecache *);
 static void cache_disassociate(struct namecache *);
@@ -176,12 +176,12 @@ static void cache_dtor(void *, void *);
  * for the time being slightly inconvenient.)
  */
 static nchash_t
-cache_hash(const struct componentname *cnp)
+cache_hash(const char *name, size_t namelen)
 {
 	const char *endptr;
 
-	endptr = cnp->cn_nameptr + cnp->cn_namelen;
-	return namei_hash(cnp->cn_nameptr, &endptr);
+	endptr = name + namelen;
+	return namei_hash(name, &endptr);
 }
 
 /*
@@ -282,20 +282,20 @@ cache_unlock_cpus(void)
  * at least one of the per-CPU locks must be held.
  */
 static struct namecache *
-cache_lookup_entry(const struct vnode *dvp, const struct componentname *cnp)
+cache_lookup_entry(const struct vnode *dvp, const char *name, size_t namelen)
 {
 	struct nchashhead *ncpp;
 	struct namecache *ncp;
 	nchash_t hash;
 
 	KASSERT(dvp != NULL);
-	hash = cache_hash(cnp);
+	hash = cache_hash(name, namelen);
 	ncpp = &nchashtbl[NCHASH2(hash, dvp)];
 
 	LIST_FOREACH(ncp, ncpp, nc_hash) {
 		if (ncp->nc_dvp != dvp ||
-		    ncp->nc_nlen != cnp->cn_namelen ||
-		    memcmp(ncp->nc_name, cnp->cn_nameptr, (u_int)ncp->nc_nlen))
+		    ncp->nc_nlen != namelen ||
+		    memcmp(ncp->nc_name, name, (u_int)ncp->nc_nlen))
 		    	continue;
 	    	mutex_enter(&ncp->nc_lock);
 		if (__predict_true(ncp->nc_dvp == dvp)) {
@@ -360,7 +360,8 @@ cache_lookup_entry(const struct vnode *d
  * depending on what error occurred.)
  */
 int
-cache_lookup(struct vnode *dvp, const struct componentname *cnp,
+cache_lookup(struct vnode *dvp, const char *name, size_t namelen,
+	     uint32_t nameiop, uint32_t cnflags,
 	     int *iswht_ret, struct vnode **vn_ret)
 {
 	struct namecache *ncp;
@@ -380,20 +381,20 @@ cache_lookup(struct vnode *dvp, const st
 
 	cpup = curcpu()->ci_data.cpu_nch;
 	mutex_enter(&cpup->cpu_lock);
-	if (__predict_false(cnp->cn_namelen > NCHNAMLEN)) {
+	if (__predict_false(namelen > NCHNAMLEN)) {
 		COUNT(cpup->cpu_stats, ncs_long);
 		mutex_exit(&cpup->cpu_lock);
 		/* found nothing */
 		return 0;
 	}
-	ncp = cache_lookup_entry(dvp, cnp);
+	ncp = cache_lookup_entry(dvp, name, namelen);
 	if (__predict_false(ncp == NULL)) {
 		COUNT(cpup->cpu_stats, ncs_miss);
 		mutex_exit(&cpup->cpu_lock);
 		/* found nothing */
 		return 0;
 	}
-	if ((cnp->cn_flags & MAKEENTRY) == 0) {
+	if ((cnflags & MAKEENTRY) == 0) {
 		COUNT(cpup->cpu_stats, ncs_badhits);
 		/*
 		 * Last component and we are renaming or deleting,
@@ -412,14 +413,13 @@ cache_lookup(struct vnode *dvp, const st
 			 * Restore the ISWHITEOUT flag saved earlier.
 			 */
 			KASSERT((ncp->nc_flags & ~ISWHITEOUT) == 0);
-			/*cnp->cn_flags |= ncp->nc_flags;*/
 			*iswht_ret = (ncp->nc_flags & ISWHITEOUT) != 0;
 		} else {
 			KASSERT(ncp->nc_flags == 0);
 		}
 
-		if (__predict_true(cnp->cn_nameiop != CREATE ||
-		    (cnp->cn_flags & ISLASTCN) == 0)) {
+		if (__predict_true(nameiop != CREATE ||
+		    (cnflags & ISLASTCN) == 0)) {
 			COUNT(cpup->cpu_stats, ncs_neghits);
 			mutex_exit(&ncp->nc_lock);
 			mutex_exit(&cpup->cpu_lock);
@@ -472,7 +472,7 @@ cache_lookup(struct vnode *dvp, const st
 
 	if (vp == dvp) {	/* lookup on "." */
 		error = 0;
-	} else if (cnp->cn_flags & ISDOTDOT) {
+	} else if (cnflags & ISDOTDOT) {
 		VOP_UNLOCK(dvp);
 		error = vn_lock(vp, LK_EXCLUSIVE);
 		vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY);
@@ -501,7 +501,8 @@ cache_lookup(struct vnode *dvp, const st
 }
 
 int
-cache_lookup_raw(struct vnode *dvp, const struct componentname *cnp,
+cache_lookup_raw(struct vnode *dvp, const char *name, size_t namelen,
+		 uint32_t cnflags,
 		 int *iswht_ret, struct vnode **vn_ret)
 {
 	struct namecache *ncp;
@@ -522,13 +523,13 @@ cache_lookup_raw(struct vnode *dvp, cons
 
 	cpup = curcpu()->ci_data.cpu_nch;
 	mutex_enter(&cpup->cpu_lock);
-	if (__predict_false(cnp->cn_namelen > NCHNAMLEN)) {
+	if (__predict_false(namelen > NCHNAMLEN)) {
 		COUNT(cpup->cpu_stats, ncs_long);
 		mutex_exit(&cpup->cpu_lock);
 		/* found nothing */
 		return 0;
 	}
-	ncp = cache_lookup_entry(dvp, cnp);
+	ncp = cache_lookup_entry(dvp, name, namelen);
 	if (__predict_false(ncp == NULL)) {
 		COUNT(cpup->cpu_stats, ncs_miss);
 		mutex_exit(&cpup->cpu_lock);
@@ -670,7 +671,8 @@ cache_revlookup(struct vnode *vp, struct
  * Add an entry to the cache
  */
 void
-cache_enter(struct vnode *dvp, struct vnode *vp, struct componentname *cnp)
+cache_enter(struct vnode *dvp, struct vnode *vp,
+	    const char *name, size_t namelen, uint32_t cnflags)
 {
 	struct namecache *ncp;
 	struct namecache *oncp;
@@ -679,8 +681,8 @@ cache_enter(struct vnode *dvp, struct vn
 	nchash_t hash;
 
 	/* First, check whether we can/should add a cache entry. */
-	if ((cnp->cn_flags & MAKEENTRY) == 0 ||
-	    __predict_false(cnp->cn_namelen > NCHNAMLEN || !doingcache)) {
+	if ((cnflags & MAKEENTRY) == 0 ||
+	    __predict_false(namelen > NCHNAMLEN || !doingcache)) {
 		return;
 	}
 
@@ -699,7 +701,7 @@ cache_enter(struct vnode *dvp, struct vn
 	 * Concurrent lookups in the same directory may race for a
 	 * cache entry.  if there's a duplicated entry, free it.
 	 */
-	oncp = cache_lookup_entry(dvp, cnp);
+	oncp = cache_lookup_entry(dvp, name, namelen);
 	if (oncp) {
 		cache_invalidate(oncp);
 		mutex_exit(&oncp->nc_lock);
@@ -716,7 +718,7 @@ cache_enter(struct vnode *dvp, struct vn
 		 * For negative hits, save the ISWHITEOUT flag so we can
 		 * restore it later when the cache entry is used again.
 		 */
-		ncp->nc_flags = cnp->cn_flags & ISWHITEOUT;
+		ncp->nc_flags = cnflags & ISWHITEOUT;
 	}
 
 	/* Fill in cache info. */
@@ -728,11 +730,11 @@ cache_enter(struct vnode *dvp, struct vn
 		ncp->nc_vlist.le_prev = NULL;
 		ncp->nc_vlist.le_next = NULL;
 	}
-	KASSERT(cnp->cn_namelen <= NCHNAMLEN);
-	ncp->nc_nlen = cnp->cn_namelen;
-	memcpy(ncp->nc_name, cnp->cn_nameptr, (unsigned)ncp->nc_nlen);
+	KASSERT(namelen <= NCHNAMLEN);
+	ncp->nc_nlen = namelen;
+	memcpy(ncp->nc_name, name, (unsigned)ncp->nc_nlen);
 	TAILQ_INSERT_TAIL(&nclruhead, ncp, nc_lru);
-	hash = cache_hash(cnp);
+	hash = cache_hash(name, namelen);
 	ncpp = &nchashtbl[NCHASH2(hash, dvp)];
 
 	/*
@@ -898,7 +900,7 @@ nchreinit(void)
  * hide entries that would now be invalid
  */
 void
-cache_purge1(struct vnode *vp, const struct componentname *cnp, int flags)
+cache_purge1(struct vnode *vp, const char *name, size_t namelen, int flags)
 {
 	struct namecache *ncp, *ncnext;
 
@@ -923,8 +925,8 @@ cache_purge1(struct vnode *vp, const str
 			cache_disassociate(ncp);
 		}
 	}
-	if (cnp != NULL) {
-		ncp = cache_lookup_entry(vp, cnp);
+	if (name != NULL) {
+		ncp = cache_lookup_entry(vp, name, namelen);
 		if (ncp) {
 			cache_invalidate(ncp);
 			mutex_exit(&ncp->nc_lock);

Index: src/sys/nfs/nfs_vnops.c
diff -u src/sys/nfs/nfs_vnops.c:1.296 src/sys/nfs/nfs_vnops.c:1.297
--- src/sys/nfs/nfs_vnops.c:1.296	Mon Nov  5 17:24:11 2012
+++ src/sys/nfs/nfs_vnops.c	Mon Nov  5 17:27:39 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: nfs_vnops.c,v 1.296 2012/11/05 17:24:11 dholland Exp $	*/
+/*	$NetBSD: nfs_vnops.c,v 1.297 2012/11/05 17:27:39 dholland Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.296 2012/11/05 17:24:11 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.297 2012/11/05 17:27:39 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_nfs.h"
@@ -279,7 +279,7 @@ nfs_cache_enter(struct vnode *dvp, struc
 	if (!timespecisset(&dnp->n_nctime))
 		dnp->n_nctime = dnp->n_vattr->va_mtime;
 
-	cache_enter(dvp, vp, cnp);
+	cache_enter(dvp, vp, cnp->cn_nameptr, cnp->cn_namelen, cnp->cn_flags);
 }
 
 /*
@@ -818,7 +818,8 @@ nfs_lookup(void *v)
 	 * the time the cache entry has been created. If it has,
 	 * the cache entry has to be ignored.
 	 */
-	cachefound = cache_lookup_raw(dvp, cnp, NULL, vpp);
+	cachefound = cache_lookup_raw(dvp, cnp->cn_nameptr, cnp->cn_namelen,
+				      cnp->cn_flags, NULL, vpp);
 	KASSERT(dvp != *vpp);
 	KASSERT((cnp->cn_flags & ISWHITEOUT) == 0);
 	if (cachefound) {
@@ -839,7 +840,7 @@ nfs_lookup(void *v)
 				vrele(*vpp);
 				*vpp = NULLVP;
 			}
-			cache_purge1(dvp, NULL, PURGE_CHILDREN);
+			cache_purge1(dvp, NULL, 0, PURGE_CHILDREN);
 			timespecclear(&np->n_nctime);
 			goto dorpc;
 		}
@@ -873,7 +874,7 @@ nfs_lookup(void *v)
 			KASSERT(newvp->v_type != VNON);
 			return (0);
 		}
-		cache_purge1(newvp, NULL, PURGE_PARENTS);
+		cache_purge1(newvp, NULL, 0, PURGE_PARENTS);
 		vput(newvp);
 		*vpp = NULLVP;
 	}
@@ -1577,7 +1578,7 @@ nfs_mknod(void *v)
 	error = nfs_mknodrpc(dvp, ap->a_vpp, cnp, ap->a_vap);
 	VN_KNOTE(dvp, NOTE_WRITE);
 	if (error == 0 || error == EEXIST)
-		cache_purge1(dvp, cnp, 0);
+		cache_purge1(dvp, cnp->cn_nameptr, cnp->cn_namelen, 0);
 	return (error);
 }
 
@@ -1704,13 +1705,13 @@ again:
 		if (cnp->cn_flags & MAKEENTRY)
 			nfs_cache_enter(dvp, newvp, cnp);
 		else
-			cache_purge1(dvp, cnp, 0);
+			cache_purge1(dvp, cnp->cn_nameptr, cnp->cn_namelen, 0);
 		*ap->a_vpp = newvp;
 	} else {
 		if (newvp)
 			vput(newvp);
 		if (error == EEXIST)
-			cache_purge1(dvp, cnp, 0);
+			cache_purge1(dvp, cnp->cn_nameptr, cnp->cn_namelen, 0);
 	}
 	VTONFS(dvp)->n_flag |= NMODIFIED;
 	if (!wccflag)
@@ -1900,11 +1901,13 @@ nfs_rename(void *v)
 		if (fvp->v_type == VDIR)
 			cache_purge(fvp);
 		else
-			cache_purge1(fdvp, fcnp, 0);
+			cache_purge1(fdvp, fcnp->cn_nameptr, fcnp->cn_namelen,
+				     0);
 		if (tvp != NULL && tvp->v_type == VDIR)
 			cache_purge(tvp);
 		else
-			cache_purge1(tdvp, tcnp, 0);
+			cache_purge1(tdvp, tcnp->cn_nameptr, tcnp->cn_namelen,
+				     0);
 	}
 out:
 	if (tdvp == tvp)
@@ -2065,7 +2068,7 @@ nfs_link(void *v)
 	    cnp->cn_cred, curlwp);
 
 	if (error == 0) {
-		cache_purge1(dvp, cnp, 0);
+		cache_purge1(dvp, cnp->cn_nameptr, cnp->cn_namelen, 0);
 	}
 	VOP_UNLOCK(vp);
 	VN_KNOTE(vp, NOTE_LINK);
@@ -2141,7 +2144,7 @@ nfs_symlink(void *v)
 	if (rexmit && error == EEXIST)
 		error = 0;
 	if (error == 0 || error == EEXIST)
-		cache_purge1(dvp, cnp, 0);
+		cache_purge1(dvp, cnp->cn_nameptr, cnp->cn_namelen, 0);
 	if (error == 0 && newvp == NULL) {
 		struct nfsnode *np = NULL;
 

Index: src/sys/sys/namei.src
diff -u src/sys/sys/namei.src:1.28 src/sys/sys/namei.src:1.29
--- src/sys/sys/namei.src:1.28	Mon Nov  5 17:24:09 2012
+++ src/sys/sys/namei.src	Mon Nov  5 17:27:37 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: namei.src,v 1.28 2012/11/05 17:24:09 dholland Exp $	*/
+/*	$NetBSD: namei.src,v 1.29 2012/11/05 17:27:37 dholland Exp $	*/
 
 /*
  * Copyright (c) 1985, 1989, 1991, 1993
@@ -259,16 +259,17 @@ uint32_t namei_hash(const char *, const 
 int	lookup_for_nfsd(struct nameidata *, struct vnode *, int neverfollow);
 int	lookup_for_nfsd_index(struct nameidata *, struct vnode *);
 int	relookup(struct vnode *, struct vnode **, struct componentname *, int);
-void	cache_purge1(struct vnode *, const struct componentname *, int);
+void	cache_purge1(struct vnode *, const char *, size_t, int);
 #define	PURGE_PARENTS	1
 #define	PURGE_CHILDREN	2
-#define	cache_purge(vp)	cache_purge1((vp), NULL, PURGE_PARENTS|PURGE_CHILDREN)
-int	cache_lookup(struct vnode *, const struct componentname *,
+#define	cache_purge(vp)	cache_purge1((vp),NULL,0,PURGE_PARENTS|PURGE_CHILDREN)
+int	cache_lookup(struct vnode *, const char *, size_t, uint32_t, uint32_t,
 			int *, struct vnode **);
-int	cache_lookup_raw(struct vnode *, const struct componentname *,
+int	cache_lookup_raw(struct vnode *, const char *, size_t, uint32_t,
 			int *, struct vnode **);
 int	cache_revlookup(struct vnode *, struct vnode **, char **, char *);
-void	cache_enter(struct vnode *, struct vnode *, struct componentname *);
+void	cache_enter(struct vnode *, struct vnode *,
+			const char *, size_t, uint32_t);
 void	nchinit(void);
 void	nchreinit(void);
 void	cache_cpu_init(struct cpu_info *);

Index: src/sys/ufs/chfs/chfs_vnops.c
diff -u src/sys/ufs/chfs/chfs_vnops.c:1.12 src/sys/ufs/chfs/chfs_vnops.c:1.13
--- src/sys/ufs/chfs/chfs_vnops.c:1.12	Mon Nov  5 17:24:12 2012
+++ src/sys/ufs/chfs/chfs_vnops.c	Mon Nov  5 17:27:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: chfs_vnops.c,v 1.12 2012/11/05 17:24:12 dholland Exp $	*/
+/*	$NetBSD: chfs_vnops.c,v 1.13 2012/11/05 17:27:40 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2010 Department of Software Engineering,
@@ -86,7 +86,8 @@ chfs_lookup(void *v)
 
 	/* Avoid doing a linear scan of the directory if the requested
 	 * directory/name couple is already in the cache. */
-	if (cache_lookup(dvp, cnp, NULL, vpp)) {
+	if (cache_lookup(dvp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, vpp)) {
 		error = *vpp == NULLVP ? ENOENT : 0;
 		goto out;
 	}
@@ -155,7 +156,8 @@ chfs_lookup(void *v)
 	 * request was for creation, as it does not improve timings on
 	 * emprical tests. */
 	if (cnp->cn_nameiop != CREATE && (cnp->cn_flags & ISDOTDOT) == 0) {
-		cache_enter(dvp, *vpp, cnp);
+		cache_enter(dvp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 	}
 
 out:

Index: src/sys/ufs/ext2fs/ext2fs_lookup.c
diff -u src/sys/ufs/ext2fs/ext2fs_lookup.c:1.71 src/sys/ufs/ext2fs/ext2fs_lookup.c:1.72
--- src/sys/ufs/ext2fs/ext2fs_lookup.c:1.71	Mon Nov  5 17:24:12 2012
+++ src/sys/ufs/ext2fs/ext2fs_lookup.c	Mon Nov  5 17:27:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_lookup.c,v 1.71 2012/11/05 17:24:12 dholland Exp $	*/
+/*	$NetBSD: ext2fs_lookup.c,v 1.72 2012/11/05 17:27:40 dholland Exp $	*/
 
 /*
  * Modified for NetBSD 1.2E
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_lookup.c,v 1.71 2012/11/05 17:24:12 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_lookup.c,v 1.72 2012/11/05 17:27:40 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -325,7 +325,8 @@ ext2fs_lookup(void *v)
 	 * check the name cache to see if the directory/name pair
 	 * we are looking for is known already.
 	 */
-	if (cache_lookup(vdp, cnp, NULL, vpp)) {
+	if (cache_lookup(vdp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, NULL, vpp)) {
 		return *vpp == NULLVP ? ENOENT : 0;
 	}
 
@@ -540,7 +541,8 @@ searchloop:
 	 * Insert name into cache (as non-existent) if appropriate.
 	 */
 	if (nameiop != CREATE) {
-		cache_enter(vdp, *vpp, cnp);
+		cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 	}
 	return ENOENT;
 
@@ -700,7 +702,7 @@ found:
 	/*
 	 * Insert name into cache if appropriate.
 	 */
-	cache_enter(vdp, *vpp, cnp);
+	cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen, cnp->cn_flags);
 	return 0;
 }
 

Index: src/sys/ufs/ufs/ufs_lookup.c
diff -u src/sys/ufs/ufs/ufs_lookup.c:1.119 src/sys/ufs/ufs/ufs_lookup.c:1.120
--- src/sys/ufs/ufs/ufs_lookup.c:1.119	Mon Nov  5 17:24:12 2012
+++ src/sys/ufs/ufs/ufs_lookup.c	Mon Nov  5 17:27:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_lookup.c,v 1.119 2012/11/05 17:24:12 dholland Exp $	*/
+/*	$NetBSD: ufs_lookup.c,v 1.120 2012/11/05 17:27:40 dholland Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_lookup.c,v 1.119 2012/11/05 17:24:12 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_lookup.c,v 1.120 2012/11/05 17:27:40 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ffs.h"
@@ -187,7 +187,8 @@ ufs_lookup(void *v)
 	 * check the name cache to see if the directory/name pair
 	 * we are looking for is known already.
 	 */
-	if (cache_lookup(vdp, cnp, &iswhiteout, vpp)) {
+	if (cache_lookup(vdp, cnp->cn_nameptr, cnp->cn_namelen,
+			 cnp->cn_nameiop, cnp->cn_flags, &iswhiteout, vpp)) {
 		if (iswhiteout) {
 			cnp->cn_flags |= ISWHITEOUT;
 		}
@@ -514,7 +515,8 @@ notfound:
 	 * Insert name into cache (as non-existent) if appropriate.
 	 */
 	if (nameiop != CREATE) {
-		cache_enter(vdp, *vpp, cnp);
+		cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen,
+			    cnp->cn_flags);
 	}
 	error = ENOENT;
 	goto out;
@@ -678,7 +680,7 @@ found:
 	/*
 	 * Insert name into cache if appropriate.
 	 */
-	cache_enter(vdp, *vpp, cnp);
+	cache_enter(vdp, *vpp, cnp->cn_nameptr, cnp->cn_namelen, cnp->cn_flags);
 	error = 0;
 
 out:

Reply via email to