From bb576b462d1d26cd07f03965c734ae6d2c5bd132 Mon Sep 17 00:00:00 2001 From: Chaskiel M Grundman Date: Sat, 28 Jan 2006 18:02:40 +0000 Subject: [PATCH] reclaim-defered-flush-fixes-20060128 fix side effect of reclaim lookaside --- src/afs/DARWIN/osi_vm.c | 2 ++ src/afs/afs_osidnlc.c | 6 ++++++ src/afs/afs_vcache.c | 12 ++++++++++++ 3 files changed, 20 insertions(+) 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; -- 2.39.5