Module Name:    src
Committed By:   joerg
Date:           Tue Jun  3 19:42:17 UTC 2014

Modified Files:
        src/sys/kern: vfs_cache.c

Log Message:
Don't play loop games, just enumerate the 10 fields explicitly.


To generate a diff of this commit:
cvs rdiff -u -r1.95 -r1.96 src/sys/kern/vfs_cache.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/kern/vfs_cache.c
diff -u src/sys/kern/vfs_cache.c:1.95 src/sys/kern/vfs_cache.c:1.96
--- src/sys/kern/vfs_cache.c:1.95	Tue Jun  3 19:30:30 2014
+++ src/sys/kern/vfs_cache.c	Tue Jun  3 19:42:17 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_cache.c,v 1.95 2014/06/03 19:30:30 joerg Exp $	*/
+/*	$NetBSD: vfs_cache.c,v 1.96 2014/06/03 19:42:17 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.95 2014/06/03 19:30:30 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.96 2014/06/03 19:42:17 joerg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_revcache.h"
@@ -238,29 +238,36 @@ cache_disassociate(struct namecache *ncp
  * Lock all CPUs to prevent any cache lookup activity.  Conceptually,
  * this locks out all "readers".
  */
+#define	UPDATE(f) do { \
+	nchstats.f += cpup->cpu_stats.f; \
+	cpup->cpu_stats.f = 0; \
+} while (/* CONSTCOND */ 0)
+
 static void
 cache_lock_cpus(void)
 {
 	CPU_INFO_ITERATOR cii;
 	struct cpu_info *ci;
 	struct nchcpu *cpup;
-	long *s, *d, *m;
 
 	for (CPU_INFO_FOREACH(cii, ci)) {
 		cpup = ci->ci_data.cpu_nch;
 		mutex_enter(&cpup->cpu_lock);
-
-		/* Collate statistics. */
-		d = (long *)&nchstats;
-		s = (long *)&cpup->cpu_stats;
-		m = s + sizeof(nchstats) / sizeof(long);
-		for (; s < m; s++, d++) {
-			*d += *s;
-			*s = 0;
-		}
+		UPDATE(ncs_goodhits);
+		UPDATE(ncs_neghits);
+		UPDATE(ncs_badhits);
+		UPDATE(ncs_falsehits);
+		UPDATE(ncs_miss);
+		UPDATE(ncs_long);
+		UPDATE(ncs_pass2);
+		UPDATE(ncs_2passes);
+		UPDATE(ncs_revhits);
+		UPDATE(ncs_revmiss);
 	}
 }
 
+#undef UPDATE
+
 /*
  * Release all CPU locks.
  */

Reply via email to