Module Name: src
Committed By: dholland
Date: Sun Jul 31 18:27:27 UTC 2016
Modified Files:
src/sbin/fsck_lfs: bufcache.c
Log Message:
PR 51264 Jose Luis Rodriguez Garcia: lfs userland bufcache rehash is broken
To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sbin/fsck_lfs/bufcache.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/fsck_lfs/bufcache.c
diff -u src/sbin/fsck_lfs/bufcache.c:1.15 src/sbin/fsck_lfs/bufcache.c:1.16
--- src/sbin/fsck_lfs/bufcache.c:1.15 Sun Mar 29 19:35:58 2015
+++ src/sbin/fsck_lfs/bufcache.c Sun Jul 31 18:27:26 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: bufcache.c,v 1.15 2015/03/29 19:35:58 chopps Exp $ */
+/* $NetBSD: bufcache.c,v 1.16 2016/07/31 18:27:26 dholland Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -101,17 +101,19 @@ bufinit(int max)
/* Widen the hash table. */
void bufrehash(int max)
{
- int i, newhashmax, newhashmask;
+ int i, newhashmax;
struct ubuf *bp, *nbp;
struct bufhash_struct *np;
- if (max < 0 || max < hashmax)
+ if (max < 0 || max <= hashmax)
return;
/* Round up to a power of two */
for (newhashmax = 1; newhashmax < max; newhashmax <<= 1)
;
- newhashmask = newhashmax - 1;
+
+ /* update the mask right away so vl_hash() uses it */
+ hashmask = newhashmax - 1;
/* Allocate new empty hash table, if we can */
np = emalloc(newhashmax * sizeof(*bufhash));
@@ -134,7 +136,6 @@ void bufrehash(int max)
free(bufhash);
bufhash = np;
hashmax = newhashmax;
- hashmask = newhashmask;
}
/* Print statistics of buffer cache usage */