From: Chaskiel M Grundman Date: Sat, 28 Jan 2006 18:02:40 +0000 (+0000) Subject: reclaim-defered-flush-fixes-20060128 X-Git-Tag: openafs-devel-1_5_0~61 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=bb576b462d1d26cd07f03965c734ae6d2c5bd132;p=packages%2Fo%2Fopenafs.git reclaim-defered-flush-fixes-20060128 fix side effect of reclaim lookaside --- diff --git a/src/afs/DARWIN/osi_vm.c b/src/afs/DARWIN/osi_vm.c index 07a5d31e3..ed845d10e 100644 --- a/src/afs/DARWIN/osi_vm.c +++ b/src/afs/DARWIN/osi_vm.c @@ -41,6 +41,8 @@ osi_VM_FlushVCache(struct vcache *avc, int *slept) kern_return_t kret; off_t size; + if (!vp) + return 0; AFS_GUNLOCK(); #if 0 if (!(UBCINFOMISSING(vp) || UBCINFORECLAIMED(vp))) { diff --git a/src/afs/afs_osidnlc.c b/src/afs/afs_osidnlc.c index cee981484..5f050ec27 100644 --- a/src/afs/afs_osidnlc.c +++ b/src/afs/afs_osidnlc.c @@ -239,6 +239,12 @@ osi_dnlc_lookup(struct vcache *adp, char *aname, int locktype) ReleaseReadLock(&afs_xvcache); dnlcstats.misses++; } else { + if (tvc->states & CVInit) { + ReleaseReadLock(&afs_xvcache); + dnlcstats.misses++; + osi_dnlc_remove(adp, aname, tvc); + return 0; + } #ifdef AFS_OSF_ENV VN_HOLD((vnode_t *) tvc); #else diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index 137c6bf5d..a9c34bcb9 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -602,6 +602,18 @@ afs_FlushReclaimedVcaches(void) tmpReclaimedVCList = tvc; printf("Reclaim list flush %lx failed: %d\n", (unsigned long) tvc, code); } + if (tvc->states & (CVInit +#ifdef AFS_DARWIN80_ENV + | CDeadVnode +#endif + )) { + tvc->states &= ~(CVInit +#ifdef AFS_DARWIN80_ENV + | CDeadVnode +#endif + ); + afs_osi_Wakeup(&tvc->states); + } } if (tmpReclaimedVCList) ReclaimedVCList = tmpReclaimedVCList;