The desiredvnodes variable is terribly named and used inconsistently.

First, rename it to initialvnodes. This isn't perfect, but it's a
little better I think.

Second, the ufs hash table can and probably should be initialvnodes in
size, but there's no reason why ntfs and isofs need to be that big. I
think initialvnodes / 4 is a reasonable number. Just a guess.

Index: conf/param.c
===================================================================
RCS file: /cvs/src/sys/conf/param.c,v
retrieving revision 1.34
diff -u -p -r1.34 param.c
--- conf/param.c        10 Apr 2012 15:50:52 -0000      1.34
+++ conf/param.c        8 Jan 2015 18:22:59 -0000
@@ -85,7 +85,7 @@ struct        timezone tz = { TIMEZONE, DST };
 #define        NPROCESS (30 + 16 * MAXUSERS)
 #define        NTEXT (80 + NPROCESS / 8)               /* actually the object 
cache */
 #define        NVNODE (NPROCESS * 2 + NTEXT + 100)      
-int    desiredvnodes = NVNODE;
+int    initialvnodes = NVNODE;
 int    maxprocess = NPROCESS;
 int    maxthread = NPROCESS + 8 * MAXUSERS;
 int    maxfiles = 5 * (NPROCESS + MAXUSERS) + 80;
Index: isofs/cd9660/cd9660_node.c
===================================================================
RCS file: /cvs/src/sys/isofs/cd9660/cd9660_node.c,v
retrieving revision 1.27
diff -u -p -r1.27 cd9660_node.c
--- isofs/cd9660/cd9660_node.c  16 Dec 2014 18:30:03 -0000      1.27
+++ isofs/cd9660/cd9660_node.c  8 Jan 2015 18:22:59 -0000
@@ -78,7 +78,7 @@ cd9660_init(vfsp)
        struct vfsconf *vfsp;
 {
 
-       isohashtbl = hashinit(desiredvnodes, M_ISOFSMNT, M_WAITOK, &isohash);
+       isohashtbl = hashinit(initialvnodes / 4, M_ISOFSMNT, M_WAITOK, 
&isohash);
        arc4random_buf(&isohashkey, sizeof(isohashkey));
        return (0);
 }
Index: kern/vfs_cache.c
===================================================================
RCS file: /cvs/src/sys/kern/vfs_cache.c,v
retrieving revision 1.41
diff -u -p -r1.41 vfs_cache.c
--- kern/vfs_cache.c    8 Jan 2015 18:07:35 -0000       1.41
+++ kern/vfs_cache.c    8 Jan 2015 18:22:59 -0000
@@ -400,7 +400,7 @@ cache_enter(struct vnode *dvp, struct vn
                TAILQ_INSERT_TAIL(&nclruneghead, ncp, nc_neg);
                numneg++;
        }
-       if (numneg  > desiredvnodes) {
+       if (numneg  > initialvnodes) {
                if ((ncp = TAILQ_FIRST(&nclruneghead))
                    != NULL)
                        cache_zap(ncp);
Index: kern/vfs_subr.c
===================================================================
RCS file: /cvs/src/sys/kern/vfs_subr.c,v
retrieving revision 1.227
diff -u -p -r1.227 vfs_subr.c
--- kern/vfs_subr.c     19 Dec 2014 05:59:21 -0000      1.227
+++ kern/vfs_subr.c     8 Jan 2015 18:23:00 -0000
@@ -142,7 +142,7 @@ void
 vntblinit(void)
 {
        /* buffer cache may need a vnode for each buffer */
-       maxvnodes = 2 * desiredvnodes;
+       maxvnodes = 2 * initialvnodes;
        pool_init(&vnode_pool, sizeof(struct vnode), 0, 0, PR_WAITOK,
            "vnodes", NULL);
        pool_init(&uvm_vnode_pool, sizeof(struct uvm_vnode), 0, 0, PR_WAITOK,
Index: msdosfs/msdosfs_denode.c
===================================================================
RCS file: /cvs/src/sys/msdosfs/msdosfs_denode.c,v
retrieving revision 1.52
diff -u -p -r1.52 msdosfs_denode.c
--- msdosfs/msdosfs_denode.c    16 Dec 2014 18:30:04 -0000      1.52
+++ msdosfs/msdosfs_denode.c    8 Jan 2015 18:23:00 -0000
@@ -82,7 +82,7 @@ static void msdosfs_hashrem(struct denod
 int
 msdosfs_init(struct vfsconf *vfsp)
 {
-       dehashtbl = hashinit(desiredvnodes/2, M_MSDOSFSMNT, M_WAITOK, &dehash);
+       dehashtbl = hashinit(initialvnodes / 4, M_MSDOSFSMNT, M_WAITOK, 
&dehash);
        arc4random_buf(&dehashkey, sizeof(dehashkey));
        return (0);
 }
Index: ntfs/ntfs_ihash.c
===================================================================
RCS file: /cvs/src/sys/ntfs/ntfs_ihash.c,v
retrieving revision 1.17
diff -u -p -r1.17 ntfs_ihash.c
--- ntfs/ntfs_ihash.c   18 Nov 2014 10:42:15 -0000      1.17
+++ ntfs/ntfs_ihash.c   8 Jan 2015 18:23:00 -0000
@@ -69,7 +69,7 @@ ntfs_nthashinit(void)
        if (ntfs_nthashtbl)
                return;
 
-       nthashtbl = hashinit(desiredvnodes, M_NTFSNTHASH, M_WAITOK, &nthash);
+       nthashtbl = hashinit(initialvnodes / 4, M_NTFSNTHASH, M_WAITOK, 
&nthash);
        if (ntfs_nthashtbl) {
                free(nthashtbl, M_NTFSNTHASH, 0);
                return;
Index: sys/vnode.h
===================================================================
RCS file: /cvs/src/sys/sys/vnode.h,v
retrieving revision 1.128
diff -u -p -r1.128 vnode.h
--- sys/vnode.h 16 Dec 2014 18:30:04 -0000      1.128
+++ sys/vnode.h 8 Jan 2015 18:23:00 -0000
@@ -242,7 +242,7 @@ extern struct freelst vnode_free_list;      /
  * Global vnode data.
  */
 extern struct vnode *rootvnode;        /* root (i.e. "/") vnode */
-extern int desiredvnodes;              /* XXX number of vnodes desired */
+extern int initialvnodes;              /* XXX number of vnodes to start */
 extern int maxvnodes;                  /* XXX number of vnodes to allocate */
 extern int syncdelay;                  /* seconds to delay syncing vnodes */
 extern int rushjob;                    /* # of slots syncer should run ASAP */
Index: ufs/ffs/ffs_softdep.c
===================================================================
RCS file: /cvs/src/sys/ufs/ffs/ffs_softdep.c,v
retrieving revision 1.130
diff -u -p -r1.130 ffs_softdep.c
--- ufs/ffs/ffs_softdep.c       23 Dec 2014 01:53:34 -0000      1.130
+++ ufs/ffs/ffs_softdep.c       8 Jan 2015 18:23:01 -0000
@@ -1160,16 +1160,16 @@ softdep_initialize(void)
        LIST_INIT(&mkdirlisthd);
        LIST_INIT(&softdep_workitem_pending);
 #ifdef KMEMSTATS
-       max_softdeps = min (desiredvnodes * 8,
+       max_softdeps = min (initialvnodes * 8,
            kmemstats[M_INODEDEP].ks_limit / (2 * sizeof(struct inodedep)));
 #else
-       max_softdeps = desiredvnodes * 4;
+       max_softdeps = initialvnodes * 4;
 #endif
        arc4random_buf(&softdep_hashkey, sizeof(softdep_hashkey));
-       pagedep_hashtbl = hashinit(desiredvnodes / 5, M_PAGEDEP, M_WAITOK,
+       pagedep_hashtbl = hashinit(initialvnodes / 5, M_PAGEDEP, M_WAITOK,
            &pagedep_hash);
        sema_init(&pagedep_in_progress, "pagedep", PRIBIO, 0);
-       inodedep_hashtbl = hashinit(desiredvnodes, M_INODEDEP, M_WAITOK,
+       inodedep_hashtbl = hashinit(initialvnodes, M_INODEDEP, M_WAITOK,
            &inodedep_hash);
        sema_init(&inodedep_in_progress, "inodedep", PRIBIO, 0);
        newblk_hashtbl = hashinit(64, M_NEWBLK, M_WAITOK, &newblk_hash);
Index: ufs/ufs/ufs_ihash.c
===================================================================
RCS file: /cvs/src/sys/ufs/ufs/ufs_ihash.c,v
retrieving revision 1.20
diff -u -p -r1.20 ufs_ihash.c
--- ufs/ufs/ufs_ihash.c 17 Nov 2014 00:59:31 -0000      1.20
+++ ufs/ufs/ufs_ihash.c 8 Jan 2015 18:23:01 -0000
@@ -72,7 +72,7 @@ ufs_ihash(dev_t dev, ufsino_t inum)
 void
 ufs_ihashinit(void)
 {
-       ihashtbl = hashinit(desiredvnodes, M_UFSMNT, M_WAITOK, &ihash);
+       ihashtbl = hashinit(initialvnodes, M_UFSMNT, M_WAITOK, &ihash);
        arc4random_buf(&ihashkey, sizeof(ihashkey));
 }
 
Index: ufs/ufs/ufs_quota.c
===================================================================
RCS file: /cvs/src/sys/ufs/ufs/ufs_quota.c,v
retrieving revision 1.36
diff -u -p -r1.36 ufs_quota.c
--- ufs/ufs/ufs_quota.c 18 Nov 2014 10:42:15 -0000      1.36
+++ ufs/ufs/ufs_quota.c 8 Jan 2015 18:23:01 -0000
@@ -824,7 +824,7 @@ long numdquot, desireddquot = DQUOTINC;
 void
 ufs_quota_init(void)
 {
-       dqhashtbl = hashinit(desiredvnodes, M_DQUOT, M_WAITOK, &dqhash);
+       dqhashtbl = hashinit(initialvnodes / 4, M_DQUOT, M_WAITOK, &dqhash);
        arc4random_buf(&dqhashkey, sizeof(dqhashkey));
        TAILQ_INIT(&dqfreelist);
 }
@@ -877,7 +877,7 @@ dqget(struct vnode *vp, u_long id, struc
         * Not in cache, allocate a new one.
         */
        if (TAILQ_FIRST(&dqfreelist) == NODQUOT &&
-           numdquot < MAXQUOTAS * desiredvnodes)
+           numdquot < MAXQUOTAS * initialvnodes / 4)
                desireddquot += DQUOTINC;
        if (numdquot < desireddquot) {
                dq = malloc(sizeof *dq, M_DQUOT, M_WAITOK | M_ZERO);

Reply via email to