Module Name: src Committed By: joerg Date: Tue Jun 3 19:30:30 UTC 2014
Modified Files: src/sys/fs/cd9660: cd9660_lookup.c src/sys/fs/filecorefs: filecore_lookup.c src/sys/kern: vfs_cache.c src/sys/sys: namei.src src/sys/ufs/ext2fs: ext2fs_lookup.c src/sys/ufs/lfs: ulfs_lookup.c src/sys/ufs/ufs: ufs_lookup.c Log Message: Introduce two helper functions to centralise the namecache statistics in vfs_cache.c. Use consistent locking around the per-cpu data. To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/fs/cd9660/cd9660_lookup.c cvs rdiff -u -r1.19 -r1.20 src/sys/fs/filecorefs/filecore_lookup.c cvs rdiff -u -r1.94 -r1.95 src/sys/kern/vfs_cache.c cvs rdiff -u -r1.31 -r1.32 src/sys/sys/namei.src cvs rdiff -u -r1.76 -r1.77 src/sys/ufs/ext2fs/ext2fs_lookup.c cvs rdiff -u -r1.20 -r1.21 src/sys/ufs/lfs/ulfs_lookup.c cvs rdiff -u -r1.131 -r1.132 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/cd9660/cd9660_lookup.c diff -u src/sys/fs/cd9660/cd9660_lookup.c:1.26 src/sys/fs/cd9660/cd9660_lookup.c:1.27 --- src/sys/fs/cd9660/cd9660_lookup.c:1.26 Fri Feb 7 15:29:21 2014 +++ src/sys/fs/cd9660/cd9660_lookup.c Tue Jun 3 19:30:30 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: cd9660_lookup.c,v 1.26 2014/02/07 15:29:21 hannken Exp $ */ +/* $NetBSD: cd9660_lookup.c,v 1.27 2014/06/03 19:30:30 joerg Exp $ */ /*- * Copyright (c) 1989, 1993, 1994 @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cd9660_lookup.c,v 1.26 2014/02/07 15:29:21 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cd9660_lookup.c,v 1.27 2014/06/03 19:30:30 joerg Exp $"); #include <sys/param.h> #include <sys/namei.h> @@ -57,8 +57,6 @@ __KERNEL_RCSID(0, "$NetBSD: cd9660_looku #include <fs/cd9660/cd9660_rrip.h> #include <fs/cd9660/cd9660_mount.h> -struct nchstats iso_nchstats; - /* * Convert a component of a pathname into a pointer to a locked inode. * This is a very central and rather complicated routine. @@ -191,7 +189,7 @@ cd9660_lookup(void *v) &bp))) return (error); numdirpasses = 2; - iso_nchstats.ncs_2passes++; + namecache_count_2passes(); } endsearch = dp->i_size; @@ -343,7 +341,7 @@ notfound: found: if (numdirpasses == 2) - iso_nchstats.ncs_pass2++; + namecache_count_pass2(); /* * Found component in pathname. Index: src/sys/fs/filecorefs/filecore_lookup.c diff -u src/sys/fs/filecorefs/filecore_lookup.c:1.19 src/sys/fs/filecorefs/filecore_lookup.c:1.20 --- src/sys/fs/filecorefs/filecore_lookup.c:1.19 Fri Feb 7 15:29:21 2014 +++ src/sys/fs/filecorefs/filecore_lookup.c Tue Jun 3 19:30:30 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: filecore_lookup.c,v 1.19 2014/02/07 15:29:21 hannken Exp $ */ +/* $NetBSD: filecore_lookup.c,v 1.20 2014/06/03 19:30:30 joerg 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.19 2014/02/07 15:29:21 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: filecore_lookup.c,v 1.20 2014/06/03 19:30:30 joerg Exp $"); #include <sys/param.h> #include <sys/namei.h> @@ -80,8 +80,6 @@ __KERNEL_RCSID(0, "$NetBSD: filecore_loo #include <fs/filecorefs/filecore_extern.h> #include <fs/filecorefs/filecore_node.h> -struct nchstats filecore_nchstats; - /* * Convert a component of a pathname into a pointer to a locked inode. * This is a very central and rather complicated routine. @@ -193,7 +191,7 @@ filecore_lookup(void *v) } else { i = dp->i_diroff; numdirpasses = 2; - filecore_nchstats.ncs_2passes++; + namecache_count_2passes(); } endsearch = FILECORE_MAXDIRENTS; @@ -251,7 +249,7 @@ notfound: found: if (numdirpasses == 2) - filecore_nchstats.ncs_pass2++; + namecache_count_pass2(); /* * Found component in pathname. Index: src/sys/kern/vfs_cache.c diff -u src/sys/kern/vfs_cache.c:1.94 src/sys/kern/vfs_cache.c:1.95 --- src/sys/kern/vfs_cache.c:1.94 Fri Feb 7 15:29:22 2014 +++ src/sys/kern/vfs_cache.c Tue Jun 3 19:30:30 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_cache.c,v 1.94 2014/02/07 15:29:22 hannken Exp $ */ +/* $NetBSD: vfs_cache.c,v 1.95 2014/06/03 19:30:30 joerg 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.94 2014/02/07 15:29:22 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.95 2014/06/03 19:30:30 joerg Exp $"); #include "opt_ddb.h" #include "opt_revcache.h" @@ -565,6 +565,7 @@ cache_revlookup(struct vnode *vp, struct { struct namecache *ncp; struct vnode *dvp; + struct nchcpu *cpup; struct ncvhashhead *nvcpp; char *bp; int error, nlen; @@ -573,6 +574,7 @@ cache_revlookup(struct vnode *vp, struct goto out; nvcpp = &ncvhashtbl[NCVHASH(vp)]; + cpup = curcpu()->ci_data.cpu_nch; mutex_enter(namecache_lock); LIST_FOREACH(ncp, nvcpp, nc_vhash) { @@ -591,7 +593,9 @@ cache_revlookup(struct vnode *vp, struct ncp->nc_name[1] == '.') panic("cache_revlookup: found entry for .."); #endif - COUNT(nchstats, ncs_revhits); + mutex_enter(&cpup->cpu_lock); + COUNT(cpup->cpu_stats, ncs_revhits); + mutex_exit(&cpup->cpu_lock); nlen = ncp->nc_nlen; if (bufp) { @@ -623,7 +627,9 @@ cache_revlookup(struct vnode *vp, struct } mutex_exit(&ncp->nc_lock); } - COUNT(nchstats, ncs_revmiss); + mutex_enter(&cpup->cpu_lock); + COUNT(cpup->cpu_stats, ncs_revmiss); + mutex_exit(&cpup->cpu_lock); mutex_exit(namecache_lock); out: *dvpp = NULL; @@ -1065,3 +1071,23 @@ namecache_print(struct vnode *vp, void ( } } #endif + +void +namecache_count_pass2(void) +{ + struct nchcpu *cpup = curcpu()->ci_data.cpu_nch; + + mutex_enter(&cpup->cpu_lock); + COUNT(cpup->cpu_stats, ncs_pass2); + mutex_exit(&cpup->cpu_lock); +} + +void +namecache_count_2passes(void) +{ + struct nchcpu *cpup = curcpu()->ci_data.cpu_nch; + + mutex_enter(&cpup->cpu_lock); + COUNT(cpup->cpu_stats, ncs_2passes); + mutex_exit(&cpup->cpu_lock); +} Index: src/sys/sys/namei.src diff -u src/sys/sys/namei.src:1.31 src/sys/sys/namei.src:1.32 --- src/sys/sys/namei.src:1.31 Sun Nov 18 18:25:08 2012 +++ src/sys/sys/namei.src Tue Jun 3 19:30:29 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: namei.src,v 1.31 2012/11/18 18:25:08 dholland Exp $ */ +/* $NetBSD: namei.src,v 1.32 2014/06/03 19:30:29 joerg Exp $ */ /* * Copyright (c) 1985, 1989, 1991, 1993 @@ -278,6 +278,8 @@ void cache_enter(struct vnode *, struct const char *, size_t, uint32_t); void nchinit(void); void nchreinit(void); +void namecache_count_pass2(void); +void namecache_count_2passes(void); void cache_cpu_init(struct cpu_info *); void cache_purgevfs(struct mount *); void namecache_print(struct vnode *, void (*)(const char *, ...) Index: src/sys/ufs/ext2fs/ext2fs_lookup.c diff -u src/sys/ufs/ext2fs/ext2fs_lookup.c:1.76 src/sys/ufs/ext2fs/ext2fs_lookup.c:1.77 --- src/sys/ufs/ext2fs/ext2fs_lookup.c:1.76 Sun May 25 14:07:19 2014 +++ src/sys/ufs/ext2fs/ext2fs_lookup.c Tue Jun 3 19:30:29 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ext2fs_lookup.c,v 1.76 2014/05/25 14:07:19 hannken Exp $ */ +/* $NetBSD: ext2fs_lookup.c,v 1.77 2014/06/03 19:30:29 joerg Exp $ */ /* * Modified for NetBSD 1.2E @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ext2fs_lookup.c,v 1.76 2014/05/25 14:07:19 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ext2fs_lookup.c,v 1.77 2014/06/03 19:30:29 joerg Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -366,7 +366,7 @@ ext2fs_lookup(void *v) (error = ext2fs_blkatoff(vdp, (off_t)results->ulr_offset, NULL, &bp))) return (error); numdirpasses = 2; - nchstats.ncs_2passes++; + namecache_count_2passes(); } prevoff = results->ulr_offset; endsearch = roundup(ext2fs_size(dp), dirblksiz); @@ -547,7 +547,7 @@ searchloop: found: if (numdirpasses == 2) - nchstats.ncs_pass2++; + namecache_count_pass2(); /* * Check that directory length properly reflects presence * of this entry. Index: src/sys/ufs/lfs/ulfs_lookup.c diff -u src/sys/ufs/lfs/ulfs_lookup.c:1.20 src/sys/ufs/lfs/ulfs_lookup.c:1.21 --- src/sys/ufs/lfs/ulfs_lookup.c:1.20 Sun May 25 13:49:13 2014 +++ src/sys/ufs/lfs/ulfs_lookup.c Tue Jun 3 19:30:30 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ulfs_lookup.c,v 1.20 2014/05/25 13:49:13 hannken Exp $ */ +/* $NetBSD: ulfs_lookup.c,v 1.21 2014/06/03 19:30:30 joerg Exp $ */ /* from NetBSD: ufs_lookup.c,v 1.122 2013/01/22 09:39:18 dholland Exp */ /* @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ulfs_lookup.c,v 1.20 2014/05/25 13:49:13 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ulfs_lookup.c,v 1.21 2014/06/03 19:30:30 joerg Exp $"); #ifdef _KERNEL_OPT #include "opt_lfs.h" @@ -288,7 +288,7 @@ ulfs_lookup(void *v) NULL, &bp, false))) goto out; numdirpasses = 2; - nchstats.ncs_2passes++; + namecache_count_2passes(); } prevoff = results->ulr_offset; endsearch = roundup(dp->i_size, dirblksiz); @@ -524,7 +524,7 @@ notfound: found: if (numdirpasses == 2) - nchstats.ncs_pass2++; + namecache_count_pass2(); /* * Check that directory length properly reflects presence * of this entry. Index: src/sys/ufs/ufs/ufs_lookup.c diff -u src/sys/ufs/ufs/ufs_lookup.c:1.131 src/sys/ufs/ufs/ufs_lookup.c:1.132 --- src/sys/ufs/ufs/ufs_lookup.c:1.131 Sun May 25 13:48:40 2014 +++ src/sys/ufs/ufs/ufs_lookup.c Tue Jun 3 19:30:30 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_lookup.c,v 1.131 2014/05/25 13:48:40 hannken Exp $ */ +/* $NetBSD: ufs_lookup.c,v 1.132 2014/06/03 19:30:30 joerg Exp $ */ /* * Copyright (c) 1989, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_lookup.c,v 1.131 2014/05/25 13:48:40 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_lookup.c,v 1.132 2014/06/03 19:30:30 joerg Exp $"); #ifdef _KERNEL_OPT #include "opt_ffs.h" @@ -286,7 +286,7 @@ ufs_lookup(void *v) NULL, &bp, false))) goto out; numdirpasses = 2; - nchstats.ncs_2passes++; + namecache_count_2passes(); } prevoff = results->ulr_offset; endsearch = roundup(dp->i_size, dirblksiz); @@ -522,7 +522,7 @@ notfound: found: if (numdirpasses == 2) - nchstats.ncs_pass2++; + namecache_count_pass2(); /* * Check that directory length properly reflects presence * of this entry.