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 <[email protected]>
@@ -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: