Module Name: src Committed By: rmind Date: Sun Jul 22 00:53:23 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/hfs: hfs_vnops.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_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/ufs/chfs: chfs_vnops.c src/sys/ufs/ext2fs: ext2fs_lookup.c src/sys/ufs/ufs: ufs_lookup.c Log Message: Move some the test for MAKEENTRY into the cache_enter(9). Make some variables in vfs_cache.c static, __read_mostly, etc. No objection on tech-kern@. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/fs/adosfs/adlookup.c cvs rdiff -u -r1.19 -r1.20 src/sys/fs/cd9660/cd9660_lookup.c cvs rdiff -u -r1.25 -r1.26 src/sys/fs/efs/efs_vnops.c cvs rdiff -u -r1.13 -r1.14 src/sys/fs/filecorefs/filecore_lookup.c cvs rdiff -u -r1.25 -r1.26 src/sys/fs/hfs/hfs_vnops.c cvs rdiff -u -r1.23 -r1.24 src/sys/fs/msdosfs/msdosfs_lookup.c cvs rdiff -u -r1.17 -r1.18 src/sys/fs/nilfs/nilfs_vnops.c cvs rdiff -u -r1.51 -r1.52 src/sys/fs/ntfs/ntfs_vnops.c cvs rdiff -u -r1.24 -r1.25 src/sys/fs/puffs/puffs_node.c cvs rdiff -u -r1.167 -r1.168 src/sys/fs/puffs/puffs_vnops.c cvs rdiff -u -r1.79 -r1.80 src/sys/fs/smbfs/smbfs_vnops.c cvs rdiff -u -r1.97 -r1.98 src/sys/fs/tmpfs/tmpfs_vnops.c cvs rdiff -u -r1.71 -r1.72 src/sys/fs/udf/udf_vnops.c cvs rdiff -u -r1.5 -r1.6 src/sys/fs/unionfs/unionfs_vnops.c cvs rdiff -u -r1.88 -r1.89 src/sys/kern/vfs_cache.c cvs rdiff -u -r1.294 -r1.295 src/sys/nfs/nfs_vnops.c cvs rdiff -u -r1.7 -r1.8 src/sys/ufs/chfs/chfs_vnops.c cvs rdiff -u -r1.69 -r1.70 src/sys/ufs/ext2fs/ext2fs_lookup.c cvs rdiff -u -r1.116 -r1.117 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.15 src/sys/fs/adosfs/adlookup.c:1.16 --- src/sys/fs/adosfs/adlookup.c:1.15 Tue Nov 30 10:43:02 2010 +++ src/sys/fs/adosfs/adlookup.c Sun Jul 22 00:53:18 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: adlookup.c,v 1.15 2010/11/30 10:43:02 dholland Exp $ */ +/* $NetBSD: adlookup.c,v 1.16 2012/07/22 00:53:18 rmind Exp $ */ /* * Copyright (c) 1994 Christian E. Hopps @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: adlookup.c,v 1.15 2010/11/30 10:43:02 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: adlookup.c,v 1.16 2012/07/22 00:53:18 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -210,7 +210,7 @@ adosfs_lookup(void *v) #endif return(EJUSTRETURN); } - if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE) + if (nameiop != CREATE) cache_enter(vdp, NULL, cnp); #ifdef ADOSFS_DIAGNOSTIC printf("ENOENT)"); @@ -240,7 +240,7 @@ found: if (vdp == *vpp) vref(vdp); found_lockdone: - if ((cnp->cn_flags & MAKEENTRY) && nocache == 0) + if (nocache == 0) cache_enter(vdp, *vpp, cnp); #ifdef ADOSFS_DIAGNOSTIC Index: src/sys/fs/cd9660/cd9660_lookup.c diff -u src/sys/fs/cd9660/cd9660_lookup.c:1.19 src/sys/fs/cd9660/cd9660_lookup.c:1.20 --- src/sys/fs/cd9660/cd9660_lookup.c:1.19 Tue Sep 27 01:27:44 2011 +++ src/sys/fs/cd9660/cd9660_lookup.c Sun Jul 22 00:53:18 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: cd9660_lookup.c,v 1.19 2011/09/27 01:27:44 christos Exp $ */ +/* $NetBSD: cd9660_lookup.c,v 1.20 2012/07/22 00:53:18 rmind Exp $ */ /*- * Copyright (c) 1989, 1993, 1994 @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cd9660_lookup.c,v 1.19 2011/09/27 01:27:44 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cd9660_lookup.c,v 1.20 2012/07/22 00:53:18 rmind Exp $"); #include <sys/param.h> #include <sys/namei.h> @@ -336,11 +336,8 @@ notfound: /* * Insert name into cache (as non-existent) if appropriate. */ - if (cnp->cn_flags & MAKEENTRY) - cache_enter(vdp, *vpp, cnp); - if (nameiop == CREATE || nameiop == RENAME) - return (EROFS); - return (ENOENT); + cache_enter(vdp, *vpp, cnp); + return (nameiop == CREATE || nameiop == RENAME) ? EROFS : ENOENT; found: if (numdirpasses == 2) @@ -402,9 +399,8 @@ found: /* * Insert name into cache if appropriate. */ - if (cnp->cn_flags & MAKEENTRY) - cache_enter(vdp, *vpp, cnp); - return (0); + cache_enter(vdp, *vpp, cnp); + return 0; } /* Index: src/sys/fs/efs/efs_vnops.c diff -u src/sys/fs/efs/efs_vnops.c:1.25 src/sys/fs/efs/efs_vnops.c:1.26 --- src/sys/fs/efs/efs_vnops.c:1.25 Tue Mar 13 18:40:36 2012 +++ src/sys/fs/efs/efs_vnops.c Sun Jul 22 00:53:19 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: efs_vnops.c,v 1.25 2012/03/13 18:40:36 elad Exp $ */ +/* $NetBSD: efs_vnops.c,v 1.26 2012/07/22 00:53:19 rmind 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.25 2012/03/13 18:40:36 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: efs_vnops.c,v 1.26 2012/07/22 00:53:19 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -102,8 +102,7 @@ efs_lookup(void *v) err = efs_inode_lookup(VFSTOEFS(ap->a_dvp->v_mount), EFS_VTOI(ap->a_dvp), ap->a_cnp, &ino); if (err) { - if (err == ENOENT && (cnp->cn_flags & MAKEENTRY) && - nameiop != CREATE) + if (err == ENOENT && nameiop != CREATE) cache_enter(ap->a_dvp, NULL, cnp); if (err == ENOENT && (nameiop == CREATE || nameiop == RENAME)) { @@ -121,10 +120,9 @@ efs_lookup(void *v) *ap->a_vpp = vp; } - if (cnp->cn_flags & MAKEENTRY) - cache_enter(ap->a_dvp, *ap->a_vpp, cnp); + cache_enter(ap->a_dvp, *ap->a_vpp, cnp); - return (0); + return 0; } static int Index: src/sys/fs/filecorefs/filecore_lookup.c diff -u src/sys/fs/filecorefs/filecore_lookup.c:1.13 src/sys/fs/filecorefs/filecore_lookup.c:1.14 --- src/sys/fs/filecorefs/filecore_lookup.c:1.13 Thu Jun 24 13:03:09 2010 +++ src/sys/fs/filecorefs/filecore_lookup.c Sun Jul 22 00:53:19 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: filecore_lookup.c,v 1.13 2010/06/24 13:03:09 hannken Exp $ */ +/* $NetBSD: filecore_lookup.c,v 1.14 2012/07/22 00:53:19 rmind 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.13 2010/06/24 13:03:09 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: filecore_lookup.c,v 1.14 2012/07/22 00:53:19 rmind Exp $"); #include <sys/param.h> #include <sys/namei.h> @@ -246,11 +246,8 @@ notfound: /* * Insert name into cache (as non-existent) if appropriate. */ - if (cnp->cn_flags & MAKEENTRY) - cache_enter(vdp, *vpp, cnp); - if (nameiop == CREATE || nameiop == RENAME) - return (EROFS); - return (ENOENT); + cache_enter(vdp, *vpp, cnp); + return (nameiop == CREATE || nameiop == RENAME) ? EROFS : ENOENT; found: if (numdirpasses == 2) @@ -317,7 +314,6 @@ found: /* * Insert name into cache if appropriate. */ - if (cnp->cn_flags & MAKEENTRY) - cache_enter(vdp, *vpp, cnp); - return (0); + cache_enter(vdp, *vpp, cnp); + return 0; } Index: src/sys/fs/hfs/hfs_vnops.c diff -u src/sys/fs/hfs/hfs_vnops.c:1.25 src/sys/fs/hfs/hfs_vnops.c:1.26 --- src/sys/fs/hfs/hfs_vnops.c:1.25 Tue Mar 13 18:40:37 2012 +++ src/sys/fs/hfs/hfs_vnops.c Sun Jul 22 00:53:19 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: hfs_vnops.c,v 1.25 2012/03/13 18:40:37 elad Exp $ */ +/* $NetBSD: hfs_vnops.c,v 1.26 2012/07/22 00:53:19 rmind Exp $ */ /*- * Copyright (c) 2005, 2007 The NetBSD Foundation, Inc. @@ -101,7 +101,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hfs_vnops.c,v 1.25 2012/03/13 18:40:37 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hfs_vnops.c,v 1.26 2012/07/22 00:53:19 rmind Exp $"); #ifdef _KERNEL_OPT #include "opt_ipsec.h" @@ -474,8 +474,7 @@ hfs_vop_lookup(void *v) */ /* XXX Cache disabled until we can make sure it works. */ #if 0 - if (cnp->cn_flags & MAKEENTRY) - cache_enter(vdp, *vpp, cnp); + cache_enter(vdp, *vpp, cnp); #endif error = 0; Index: src/sys/fs/msdosfs/msdosfs_lookup.c diff -u src/sys/fs/msdosfs/msdosfs_lookup.c:1.23 src/sys/fs/msdosfs/msdosfs_lookup.c:1.24 --- src/sys/fs/msdosfs/msdosfs_lookup.c:1.23 Tue Nov 30 10:43:03 2010 +++ src/sys/fs/msdosfs/msdosfs_lookup.c Sun Jul 22 00:53:19 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: msdosfs_lookup.c,v 1.23 2010/11/30 10:43:03 dholland Exp $ */ +/* $NetBSD: msdosfs_lookup.c,v 1.24 2012/07/22 00:53:19 rmind 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.23 2010/11/30 10:43:03 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: msdosfs_lookup.c,v 1.24 2012/07/22 00:53:19 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -399,7 +399,7 @@ notfound: * e.g. creating a file 'foo' won't invalidate a negative entry * for 'FOO'. */ - if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE) + if (nameiop != CREATE) cache_enter(vdp, *vpp, cnp); #endif @@ -553,10 +553,9 @@ foundroot: /* * Insert name into cache if appropriate. */ - if (cnp->cn_flags & MAKEENTRY) - cache_enter(vdp, *vpp, cnp); + cache_enter(vdp, *vpp, cnp); - return (0); + return 0; } /* Index: src/sys/fs/nilfs/nilfs_vnops.c diff -u src/sys/fs/nilfs/nilfs_vnops.c:1.17 src/sys/fs/nilfs/nilfs_vnops.c:1.18 --- src/sys/fs/nilfs/nilfs_vnops.c:1.17 Tue Mar 13 18:40:38 2012 +++ src/sys/fs/nilfs/nilfs_vnops.c Sun Jul 22 00:53:19 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: nilfs_vnops.c,v 1.17 2012/03/13 18:40:38 elad Exp $ */ +/* $NetBSD: nilfs_vnops.c,v 1.18 2012/07/22 00:53:19 rmind 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.17 2012/03/13 18:40:38 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.18 2012/07/22 00:53:19 rmind Exp $"); #endif /* not lint */ @@ -760,7 +760,7 @@ out: * the file might not be found and thus putting it into the namecache * might be seen as negative caching. */ - if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE) + if (nameiop != CREATE) cache_enter(dvp, *vpp, cnp); 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.51 src/sys/fs/ntfs/ntfs_vnops.c:1.52 --- src/sys/fs/ntfs/ntfs_vnops.c:1.51 Sun Apr 29 22:53:59 2012 +++ src/sys/fs/ntfs/ntfs_vnops.c Sun Jul 22 00:53:19 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: ntfs_vnops.c,v 1.51 2012/04/29 22:53:59 chs Exp $ */ +/* $NetBSD: ntfs_vnops.c,v 1.52 2012/07/22 00:53:19 rmind Exp $ */ /* * Copyright (c) 1992, 1993 @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.51 2012/04/29 22:53:59 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.52 2012/07/22 00:53:19 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -725,10 +725,9 @@ ntfs_lookup(void *v) (unsigned long long)VTONT(*ap->a_vpp)->i_number)); } - if (cnp->cn_flags & MAKEENTRY) - cache_enter(dvp, *ap->a_vpp, cnp); + cache_enter(dvp, *ap->a_vpp, cnp); - return (error); + return error; } /* Index: src/sys/fs/puffs/puffs_node.c diff -u src/sys/fs/puffs/puffs_node.c:1.24 src/sys/fs/puffs/puffs_node.c:1.25 --- src/sys/fs/puffs/puffs_node.c:1.24 Sun Apr 8 15:04:41 2012 +++ src/sys/fs/puffs/puffs_node.c Sun Jul 22 00:53:20 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs_node.c,v 1.24 2012/04/08 15:04:41 manu Exp $ */ +/* $NetBSD: puffs_node.c,v 1.25 2012/07/22 00:53:20 rmind 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.24 2012/04/08 15:04:41 manu Exp $"); +__KERNEL_RCSID(0, "$NetBSD: puffs_node.c,v 1.25 2012/07/22 00:53:20 rmind Exp $"); #include <sys/param.h> #include <sys/hash.h> @@ -246,7 +246,7 @@ puffs_newnode(struct mount *mp, struct v vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); *vpp = vp; - if ((cnp->cn_flags & MAKEENTRY) && PUFFS_USE_NAMECACHE(pmp)) + if (PUFFS_USE_NAMECACHE(pmp)) cache_enter(dvp, vp, cnp); return 0; Index: src/sys/fs/puffs/puffs_vnops.c diff -u src/sys/fs/puffs/puffs_vnops.c:1.167 src/sys/fs/puffs/puffs_vnops.c:1.168 --- src/sys/fs/puffs/puffs_vnops.c:1.167 Sat Jul 21 05:17:11 2012 +++ src/sys/fs/puffs/puffs_vnops.c Sun Jul 22 00:53:20 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs_vnops.c,v 1.167 2012/07/21 05:17:11 manu Exp $ */ +/* $NetBSD: puffs_vnops.c,v 1.168 2012/07/22 00:53:20 rmind 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.167 2012/07/21 05:17:11 manu Exp $"); +__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.168 2012/07/22 00:53:20 rmind Exp $"); #include <sys/param.h> #include <sys/buf.h> @@ -586,9 +586,8 @@ puffs_vnop_lookup(void *v) /* save negative cache entry */ } else { - if ((cnp->cn_flags & MAKEENTRY) - && PUFFS_USE_NAMECACHE(pmp) - && !PUFFS_USE_FS_TTL(pmp)) + if (PUFFS_USE_NAMECACHE(pmp) && + !PUFFS_USE_FS_TTL(pmp)) cache_enter(dvp, NULL, cnp); } } @@ -664,7 +663,7 @@ puffs_vnop_lookup(void *v) KASSERT(lookup_msg->pvnr_newnode == VPTOPP(vp)->pn_cookie); *ap->a_vpp = vp; - if ((cnp->cn_flags & MAKEENTRY) != 0 && PUFFS_USE_NAMECACHE(pmp)) + if (PUFFS_USE_NAMECACHE(pmp)) cache_enter(dvp, vp, cnp); /* XXX */ Index: src/sys/fs/smbfs/smbfs_vnops.c diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.79 src/sys/fs/smbfs/smbfs_vnops.c:1.80 --- src/sys/fs/smbfs/smbfs_vnops.c:1.79 Tue Mar 13 18:40:49 2012 +++ src/sys/fs/smbfs/smbfs_vnops.c Sun Jul 22 00:53:20 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: smbfs_vnops.c,v 1.79 2012/03/13 18:40:49 elad Exp $ */ +/* $NetBSD: smbfs_vnops.c,v 1.80 2012/07/22 00:53:20 rmind 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.79 2012/03/13 18:40:49 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.80 2012/07/22 00:53:20 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -596,16 +596,12 @@ smbfs_create(void *v) if (error) goto out; - /* No error */ - if (cnp->cn_flags & MAKEENTRY) - cache_enter(dvp, *ap->a_vpp, cnp); + cache_enter(dvp, *ap->a_vpp, cnp); out: VN_KNOTE(dvp, NOTE_WRITE); vput(dvp); return (error); - - } int @@ -1300,7 +1296,7 @@ smbfs_lookup(void *v) /* * Insert name into cache (as non-existent) if appropriate. */ - if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE) + if (nameiop != CREATE) cache_enter(dvp, *vpp, cnp); return (ENOENT); @@ -1353,17 +1349,15 @@ smbfs_lookup(void *v) return error; } - if ((cnp->cn_flags & MAKEENTRY)) { - KASSERT(error == 0); - if (cnp->cn_nameiop != DELETE || !islastcn) { - VTOSMB(*vpp)->n_ctime = VTOSMB(*vpp)->n_mtime.tv_sec; - cache_enter(dvp, *vpp, cnp); + KASSERT(error == 0); + if (cnp->cn_nameiop != DELETE || !islastcn) { + VTOSMB(*vpp)->n_ctime = VTOSMB(*vpp)->n_mtime.tv_sec; + cache_enter(dvp, *vpp, cnp); #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); + } else if (error == ENOENT && cnp->cn_nameiop != CREATE) { + VTOSMB(*vpp)->n_nctime = VTOSMB(*vpp)->n_mtime.tv_sec; + cache_enter(dvp, *vpp, cnp); #endif - } } return (0); Index: src/sys/fs/tmpfs/tmpfs_vnops.c diff -u src/sys/fs/tmpfs/tmpfs_vnops.c:1.97 src/sys/fs/tmpfs/tmpfs_vnops.c:1.98 --- src/sys/fs/tmpfs/tmpfs_vnops.c:1.97 Wed May 9 00:16:07 2012 +++ src/sys/fs/tmpfs/tmpfs_vnops.c Sun Jul 22 00:53:21 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: tmpfs_vnops.c,v 1.97 2012/05/09 00:16:07 riastradh Exp $ */ +/* $NetBSD: tmpfs_vnops.c,v 1.98 2012/07/22 00:53:21 rmind 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.97 2012/05/09 00:16:07 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.98 2012/07/22 00:53:21 rmind Exp $"); #include <sys/param.h> #include <sys/dirent.h> @@ -277,7 +277,7 @@ done: * Cache the result, unless request was for creation (as it does * not improve the performance). */ - if ((cnp->cn_flags & MAKEENTRY) != 0 && cnp->cn_nameiop != CREATE) { + if (cnp->cn_nameiop != CREATE) { cache_enter(dvp, *vpp, cnp); } out: Index: src/sys/fs/udf/udf_vnops.c diff -u src/sys/fs/udf/udf_vnops.c:1.71 src/sys/fs/udf/udf_vnops.c:1.72 --- src/sys/fs/udf/udf_vnops.c:1.71 Sun Apr 29 22:53:59 2012 +++ src/sys/fs/udf/udf_vnops.c Sun Jul 22 00:53:21 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: udf_vnops.c,v 1.71 2012/04/29 22:53:59 chs Exp $ */ +/* $NetBSD: udf_vnops.c,v 1.72 2012/07/22 00:53:21 rmind 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.71 2012/04/29 22:53:59 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.72 2012/07/22 00:53:21 rmind Exp $"); #endif /* not lint */ @@ -795,7 +795,7 @@ out: * the file might not be found and thus putting it into the namecache * might be seen as negative caching. */ - if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE) + if (nameiop != CREATE) cache_enter(dvp, *vpp, cnp); 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.5 src/sys/fs/unionfs/unionfs_vnops.c:1.6 --- src/sys/fs/unionfs/unionfs_vnops.c:1.5 Sun Jun 12 03:35:55 2011 +++ src/sys/fs/unionfs/unionfs_vnops.c Sun Jul 22 00:53:21 2012 @@ -142,8 +142,7 @@ unionfs_lookup(void *v) vn_lock(dunp->un_dvp, LK_EXCLUSIVE | LK_RETRY); vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); - } else if (error == ENOENT && (cnflags & MAKEENTRY) && - nameiop != CREATE) + } else if (error == ENOENT && nameiop != CREATE) cache_enter(dvp, NULLVP, cnp); UNIONFS_INTERNAL_DEBUG("unionfs_lookup: leave (%d)\n", error); @@ -269,8 +268,7 @@ unionfs_lookup(void *v) *(ap->a_vpp) = vp; - if (cnflags & MAKEENTRY) - cache_enter(dvp, vp, cnp); + cache_enter(dvp, vp, cnp); /* XXXAD lock status on error */ unionfs_lookup_out: @@ -279,7 +277,7 @@ unionfs_lookup_out: if (lvp != NULLVP) vrele(lvp); - if (error == ENOENT && (cnflags & MAKEENTRY) && nameiop != CREATE) + if (error == ENOENT && nameiop != CREATE) cache_enter(dvp, NULLVP, cnp); 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.88 src/sys/kern/vfs_cache.c:1.89 --- src/sys/kern/vfs_cache.c:1.88 Sun Jun 12 03:35:56 2011 +++ src/sys/kern/vfs_cache.c Sun Jul 22 00:53:18 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_cache.c,v 1.88 2011/06/12 03:35:56 rmind Exp $ */ +/* $NetBSD: vfs_cache.c,v 1.89 2012/07/22 00:53:18 rmind 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.88 2011/06/12 03:35:56 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.89 2012/07/22 00:53:18 rmind Exp $"); #include "opt_ddb.h" #include "opt_revcache.h" @@ -111,30 +111,37 @@ struct nchcpu { /* * Structures associated with name cacheing. */ -LIST_HEAD(nchashhead, namecache) *nchashtbl; -u_long nchash; /* size of hash table - 1 */ + +static kmutex_t *namecache_lock __read_mostly; +static pool_cache_t namecache_cache __read_mostly; +static TAILQ_HEAD(, namecache) nclruhead __cacheline_aligned; + +static LIST_HEAD(nchashhead, namecache) *nchashtbl __read_mostly; +static u_long nchash __read_mostly; + #define NCHASH(cnp, dvp) \ (((cnp)->cn_hash ^ ((uintptr_t)(dvp) >> 3)) & nchash) -LIST_HEAD(ncvhashhead, namecache) *ncvhashtbl; -u_long ncvhash; /* size of hash table - 1 */ +static LIST_HEAD(ncvhashhead, namecache) *ncvhashtbl __read_mostly; +static u_long ncvhash __read_mostly; + #define NCVHASH(vp) (((uintptr_t)(vp) >> 3) & ncvhash) -long numcache; /* number of cache entries allocated */ -static u_int cache_gcpend; /* number of entries pending GC */ -static void *cache_gcqueue; /* garbage collection queue */ +/* Number of cache entries allocated. */ +static long numcache __cacheline_aligned; -TAILQ_HEAD(, namecache) nclruhead = /* LRU chain */ - TAILQ_HEAD_INITIALIZER(nclruhead); -#define COUNT(c,x) (c.x++) -struct nchstats nchstats; /* cache effectiveness statistics */ +/* Garbage collection queue and number of entries pending in it. */ +static void *cache_gcqueue; +static u_int cache_gcpend; -static pool_cache_t namecache_cache; +/* Cache effectiveness statistics. */ +struct nchstats nchstats __cacheline_aligned; +#define COUNT(c,x) (c.x++) -int cache_lowat = 95; -int cache_hiwat = 98; -int cache_hottime = 5; /* number of seconds */ -int doingcache = 1; /* 1 => enable the cache */ +static const int cache_lowat = 95; +static const int cache_hiwat = 98; +static const int cache_hottime = 5; /* number of seconds */ +static int doingcache = 1; /* 1 => enable the cache */ static struct evcnt cache_ev_scan; static struct evcnt cache_ev_gc; @@ -142,11 +149,8 @@ static struct evcnt cache_ev_over; static struct evcnt cache_ev_under; static struct evcnt cache_ev_forced; -/* A single lock to serialize modifications. */ -static kmutex_t *namecache_lock; - static void cache_invalidate(struct namecache *); -static inline struct namecache *cache_lookup_entry( +static struct namecache *cache_lookup_entry( const struct vnode *, const struct componentname *); static void cache_thread(void *); static void cache_invalidate(struct namecache *); @@ -587,12 +591,11 @@ cache_enter(struct vnode *dvp, struct vn struct nchashhead *ncpp; struct ncvhashhead *nvcpp; -#ifdef DIAGNOSTIC - if (cnp->cn_namelen > NCHNAMLEN) - panic("cache_enter: name too long"); -#endif - if (!doingcache) + /* First, check whether we can/should add a cache entry. */ + if ((cnp->cn_flags & MAKEENTRY) == 0 || + __predict_false(cnp->cn_namelen > NCHNAMLEN || !doingcache)) { return; + } if (numcache > desiredvnodes) { mutex_enter(namecache_lock); @@ -628,6 +631,7 @@ cache_enter(struct vnode *dvp, struct vn */ ncp->nc_flags = cnp->cn_flags & ISWHITEOUT; } + /* Fill in cache info. */ ncp->nc_dvp = dvp; LIST_INSERT_HEAD(&dvp->v_dnclist, ncp, nc_dvlist); @@ -637,9 +641,10 @@ 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; - TAILQ_INSERT_TAIL(&nclruhead, ncp, nc_lru); memcpy(ncp->nc_name, cnp->cn_nameptr, (unsigned)ncp->nc_nlen); + TAILQ_INSERT_TAIL(&nclruhead, ncp, nc_lru); ncpp = &nchashtbl[NCHASH(cnp, dvp)]; /* @@ -685,6 +690,7 @@ nchinit(void) { int error; + TAILQ_INIT(&nclruhead); namecache_cache = pool_cache_init(sizeof(struct namecache), coherency_unit, 0, 0, "ncache", NULL, IPL_NONE, cache_ctor, cache_dtor, NULL); Index: src/sys/nfs/nfs_vnops.c diff -u src/sys/nfs/nfs_vnops.c:1.294 src/sys/nfs/nfs_vnops.c:1.295 --- src/sys/nfs/nfs_vnops.c:1.294 Fri Apr 27 18:12:01 2012 +++ src/sys/nfs/nfs_vnops.c Sun Jul 22 00:53:21 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: nfs_vnops.c,v 1.294 2012/04/27 18:12:01 drochner Exp $ */ +/* $NetBSD: nfs_vnops.c,v 1.295 2012/07/22 00:53:21 rmind Exp $ */ /* * Copyright (c) 1989, 1993 @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.294 2012/04/27 18:12:01 drochner Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.295 2012/07/22 00:53:21 rmind Exp $"); #ifdef _KERNEL_OPT #include "opt_nfs.h" @@ -267,6 +267,9 @@ nfs_cache_enter(struct vnode *dvp, struc { struct nfsnode *dnp = VTONFS(dvp); + if ((cnp->cn_flags & MAKEENTRY) == 0) { + return; + } if (vp != NULL) { struct nfsnode *np = VTONFS(vp); @@ -996,8 +999,7 @@ dorpc: #endif nfsm_loadattr(newvp, (struct vattr *)0, 0); } - if ((cnp->cn_flags & MAKEENTRY) && - (cnp->cn_nameiop != DELETE || !(flags & ISLASTCN))) { + if (cnp->cn_nameiop != DELETE || !(flags & ISLASTCN)) { nfs_cache_enter(dvp, newvp, cnp); } *vpp = newvp; @@ -1009,8 +1011,7 @@ dorpc: * (the nfsm_* macros will jump to nfsm_reqdone * on error). */ - if (error == ENOENT && (cnp->cn_flags & MAKEENTRY) && - cnp->cn_nameiop != CREATE) { + if (error == ENOENT && cnp->cn_nameiop != CREATE) { nfs_cache_enter(dvp, NULL, cnp); } if (newvp != NULLVP) { @@ -1549,8 +1550,7 @@ nfs_mknodrpc(struct vnode *dvp, struct v if (newvp) vput(newvp); } else { - if (cnp->cn_flags & MAKEENTRY) - nfs_cache_enter(dvp, newvp, cnp); + nfs_cache_enter(dvp, newvp, cnp); *vpp = newvp; } VTONFS(dvp)->n_flag |= NMODIFIED; @@ -2252,8 +2252,7 @@ nfs_mkdir(void *v) } } else { VN_KNOTE(dvp, NOTE_WRITE | NOTE_LINK); - if (cnp->cn_flags & MAKEENTRY) - nfs_cache_enter(dvp, newvp, cnp); + nfs_cache_enter(dvp, newvp, cnp); *ap->a_vpp = newvp; } vput(dvp); Index: src/sys/ufs/chfs/chfs_vnops.c diff -u src/sys/ufs/chfs/chfs_vnops.c:1.7 src/sys/ufs/chfs/chfs_vnops.c:1.8 --- src/sys/ufs/chfs/chfs_vnops.c:1.7 Sun Apr 29 22:54:00 2012 +++ src/sys/ufs/chfs/chfs_vnops.c Sun Jul 22 00:53:22 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: chfs_vnops.c,v 1.7 2012/04/29 22:54:00 chs Exp $ */ +/* $NetBSD: chfs_vnops.c,v 1.8 2012/07/22 00:53:22 rmind Exp $ */ /*- * Copyright (c) 2010 Department of Software Engineering, @@ -154,9 +154,9 @@ chfs_lookup(void *v) // Store the result of this lookup in the cache. Avoid this if the // request was for creation, as it does not improve timings on // emprical tests. - if ((cnp->cn_flags & MAKEENTRY) && cnp->cn_nameiop != CREATE - && (cnp->cn_flags & ISDOTDOT) == 0) + if (cnp->cn_nameiop != CREATE && (cnp->cn_flags & ISDOTDOT) == 0) { cache_enter(dvp, *vpp, cnp); + } out: // If there were no errors, *vpp cannot be null and it must be Index: src/sys/ufs/ext2fs/ext2fs_lookup.c diff -u src/sys/ufs/ext2fs/ext2fs_lookup.c:1.69 src/sys/ufs/ext2fs/ext2fs_lookup.c:1.70 --- src/sys/ufs/ext2fs/ext2fs_lookup.c:1.69 Fri Mar 16 08:39:54 2012 +++ src/sys/ufs/ext2fs/ext2fs_lookup.c Sun Jul 22 00:53:22 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: ext2fs_lookup.c,v 1.69 2012/03/16 08:39:54 hannken Exp $ */ +/* $NetBSD: ext2fs_lookup.c,v 1.70 2012/07/22 00:53:22 rmind Exp $ */ /* * Modified for NetBSD 1.2E @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ext2fs_lookup.c,v 1.69 2012/03/16 08:39:54 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ext2fs_lookup.c,v 1.70 2012/07/22 00:53:22 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -538,9 +538,10 @@ searchloop: /* * Insert name into cache (as non-existent) if appropriate. */ - if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE) + if (nameiop != CREATE) { cache_enter(vdp, *vpp, cnp); - return (ENOENT); + } + return ENOENT; found: if (numdirpasses == 2) @@ -698,9 +699,8 @@ found: /* * Insert name into cache if appropriate. */ - if (cnp->cn_flags & MAKEENTRY) - cache_enter(vdp, *vpp, cnp); - return (0); + cache_enter(vdp, *vpp, cnp); + return 0; } /* Index: src/sys/ufs/ufs/ufs_lookup.c diff -u src/sys/ufs/ufs/ufs_lookup.c:1.116 src/sys/ufs/ufs/ufs_lookup.c:1.117 --- src/sys/ufs/ufs/ufs_lookup.c:1.116 Mon Jun 4 16:46:45 2012 +++ src/sys/ufs/ufs/ufs_lookup.c Sun Jul 22 00:53:22 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_lookup.c,v 1.116 2012/06/04 16:46:45 riastradh Exp $ */ +/* $NetBSD: ufs_lookup.c,v 1.117 2012/07/22 00:53:22 rmind Exp $ */ /* * Copyright (c) 1989, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_lookup.c,v 1.116 2012/06/04 16:46:45 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_lookup.c,v 1.117 2012/07/22 00:53:22 rmind Exp $"); #ifdef _KERNEL_OPT #include "opt_ffs.h" @@ -496,8 +496,9 @@ notfound: /* * Insert name into cache (as non-existent) if appropriate. */ - if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE) + if (nameiop != CREATE) { cache_enter(vdp, *vpp, cnp); + } error = ENOENT; goto out; @@ -660,8 +661,7 @@ found: /* * Insert name into cache if appropriate. */ - if (cnp->cn_flags & MAKEENTRY) - cache_enter(vdp, *vpp, cnp); + cache_enter(vdp, *vpp, cnp); error = 0; out: