Module Name:    src
Committed By:   ad
Date:           Sun Mar 22 00:34:31 UTC 2020

Modified Files:
        src/sys/kern [ad-namecache]: vfs_cache.c

Log Message:
- Fold the "doingcache" conditional into the max length conditional.
- Mark the tunables __read_mostly.


To generate a diff of this commit:
cvs rdiff -u -r1.126.2.14 -r1.126.2.15 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.126.2.14 src/sys/kern/vfs_cache.c:1.126.2.15
--- src/sys/kern/vfs_cache.c:1.126.2.14	Sat Mar 21 22:00:55 2020
+++ src/sys/kern/vfs_cache.c	Sun Mar 22 00:34:31 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_cache.c,v 1.126.2.14 2020/03/21 22:00:55 ad Exp $	*/
+/*	$NetBSD: vfs_cache.c,v 1.126.2.15 2020/03/22 00:34:31 ad Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2019, 2020 The NetBSD Foundation, Inc.
@@ -171,7 +171,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.126.2.14 2020/03/21 22:00:55 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.126.2.15 2020/03/22 00:34:31 ad Exp $");
 
 #define __NAMECACHE_PRIVATE
 #ifdef _KERNEL_OPT
@@ -235,10 +235,13 @@ struct nchstats	nchstats __cacheline_ali
 	KPREEMPT_ENABLE(l); \
 } while (/* CONSTCOND */ 0);
 
-/* Tunables */
-static const int cache_lru_maxdeact = 2;	/* max # to deactivate */
-static const int cache_lru_maxscan = 64;	/* max # to scan/reclaim */
-static int doingcache = 1;			/* 1 => enable the cache */
+/*
+ * Tunables.  cache_maxlen replaces the historical doingcache:
+ * set it zero to disable caching for debugging purposes.
+ */
+int cache_lru_maxdeact __read_mostly = 2;	/* max # to deactivate */
+int cache_lru_maxscan __read_mostly = 64;	/* max # to scan/reclaim */
+int cache_maxlen __read_mostly = USHRT_MAX;	/* max name length to cache */
 
 /* sysctl */
 static struct	sysctllog *cache_sysctllog;
@@ -515,11 +518,7 @@ cache_lookup(struct vnode *dvp, const ch
 	}
 	*vn_ret = NULL;
 
-	if (__predict_false(!doingcache)) {
-		return false;
-	}
-
-	if (__predict_false(namelen > USHRT_MAX)) {
+	if (__predict_false(namelen > cache_maxlen)) {
 		SDT_PROBE(vfs, namecache, lookup, toolong, dvp,
 		    name, namelen, 0, 0);
 		COUNT(ncs_long);
@@ -644,7 +643,7 @@ cache_lookup_linked(struct vnode *dvp, c
 	*vn_ret = NULL;
 
 	/* If disabled, or file system doesn't support this, bail out. */
-	if (__predict_false(!doingcache ||
+	if (__predict_false(cache_maxlen == 0 ||
 	    (dvp->v_mount->mnt_iflag & IMNT_NCLOOKUP) == 0)) {
 		return false;
 	}
@@ -753,7 +752,7 @@ cache_revlookup(struct vnode *vp, struct
 
 	KASSERT(vp != NULL);
 
-	if (!doingcache)
+	if (cache_maxlen == 0)
 		goto out;
 
 	rw_enter(&vi->vi_nc_listlock, RW_READER);
@@ -855,7 +854,7 @@ cache_enter(struct vnode *dvp, struct vn
 
 	/* First, check whether we can/should add a cache entry. */
 	if ((cnflags & MAKEENTRY) == 0 ||
-	    __predict_false(namelen > USHRT_MAX || !doingcache)) {
+	    __predict_false(namelen > cache_maxlen)) {
 		SDT_PROBE(vfs, namecache, enter, toolong, vp, name, namelen,
 		    0, 0);
 		return;

Reply via email to