From: Marc Dionne Date: Fri, 12 Oct 2012 20:31:24 +0000 (-0400) Subject: libafs: Fix second pass in ShakeLooseVCaches X-Git-Tag: openafs-stable-1_8_0pre1~1919 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=a7828d50a82384e6d0fb0ad5b5a702f768029581;hp=fa3116567e2998af73eb116751032713850c9459 libafs: Fix second pass in ShakeLooseVCaches Commit 3105c7ff introduced a two phase process for reclaiming vcache entries. First go through the list and do what's possible without sleeping (skipping aliased dentries on Linux), then do a second pass only if necessary, allowing sleeping. Unfortunately the test for the end of the VLRU scan is incorrect and can never trigger, so this second pass was effectively disabled and any code that is conditional on defersleep=1 was never exercised. The code to start the second scan also has issues. Fix the end of VLRU test, and also correctly set the variables needed to restart the scan. Change-Id: I8034cd3b79aab4f2976ab2559c13c102126480d7 Reviewed-on: http://gerrit.openafs.org/8234 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index 3e48723..8af3cde 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -736,10 +736,11 @@ afs_ShakeLooseVCaches(afs_int32 anumber) i = 0; continue; /* start over - may have raced. */ } - if (tq == uq) { + if (uq == &VLRU) { if (anumber && !defersleep) { defersleep = 1; - tq = VLRU.prev; + uq = VLRU.prev; + i = 0; continue; } break;