afs: Fix VLRU traversal sanity check
authorAndrew Deason <adeason@sinenomine.net>
Fri, 16 Nov 2012 20:18:32 +0000 (14:18 -0600)
committerDerrick Brashear <shadow@your-file-system.com>
Wed, 5 Dec 2012 16:21:37 +0000 (08:21 -0800)
On non-Linux, the number of vcaches in the VLRU can easily exceed
afs_maxvcount, since we allocate new vcaches when we run out. So,
assume we only have afs_vcount vcaches on the VLRU, instead of
assuming we have at most afs_maxvcount vcaches.

Change-Id: I3bec8f795b1f6e086ddb490400616c5b42d8b8be
Reviewed-on: http://gerrit.openafs.org/8471
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>

src/afs/afs_vcache.c

index 8af3cde..4acfd34 100644 (file)
@@ -716,9 +716,8 @@ afs_ShakeLooseVCaches(afs_int32 anumber)
        uq = QPrev(tq);
        if (tvc->f.states & CVFlushed) {
            refpanic("CVFlushed on VLRU");
-           /* In the other path, this was 2 * afs_cacheStats */
-       } else if (!afsd_dynamic_vcaches && i++ > afs_maxvcount) {
-           refpanic("Exceeded pool of AFS vnodes(VLRU cycle?)");
+       } else if (!afsd_dynamic_vcaches && i++ > afs_vcount) {
+           refpanic("Found too many AFS vnodes on VLRU (VLRU cycle?)");
        } else if (QNext(uq) != tq) {
            refpanic("VLRU inconsistent");
        } else if (tvc->f.states & CVInit) {