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.