X-Git-Url: https://git.openafs.org/?p=openafs.git;a=blobdiff_plain;f=src%2Fafs%2Fafs_vcache.c;h=d96bfc022239dc4b2d4bb7d97bdbe0dce042abb4;hp=f3577446377b462c88343cb1500eb0adf313b49e;hb=3105c7ff;hpb=75c2f96364d598ec0c134cb6b366ce067b8b7f49 diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index f357744..d96bfc0 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -698,7 +698,7 @@ afs_ShakeLooseVCaches(afs_int32 anumber) afs_int32 i, loop; struct vcache *tvc; struct afs_q *tq, *uq; - int fv_slept; + int fv_slept, defersleep = 0; afs_int32 target = anumber; i = 0; @@ -718,7 +718,7 @@ afs_ShakeLooseVCaches(afs_int32 anumber) } fv_slept = 0; - if (osi_TryEvictVCache(tvc, &fv_slept)) + if (osi_TryEvictVCache(tvc, &fv_slept, defersleep)) anumber--; if (fv_slept) { @@ -728,8 +728,14 @@ afs_ShakeLooseVCaches(afs_int32 anumber) i = 0; continue; /* start over - may have raced. */ } - if (tq == uq) + if (tq == uq) { + if (anumber && !defersleep) { + defersleep = 1; + tq = VLRU.prev; + continue; + } break; + } } if (!afsd_dynamic_vcaches && anumber == target) { afs_warn("afs_ShakeLooseVCaches: warning none freed, using %d of %d\n",