]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-reclaim-defered-flush-fixes-20060128
authorChaskiel M Grundman <cg2v@andrew.cmu.edu>
Sat, 28 Jan 2006 18:04:04 +0000 (18:04 +0000)
committerDerrick Brashear <shadow@dementia.org>
Sat, 28 Jan 2006 18:04:04 +0000 (18:04 +0000)
fix side effect of reclaim lookaside

(cherry picked from commit bb576b462d1d26cd07f03965c734ae6d2c5bd132)

src/afs/DARWIN/osi_vm.c
src/afs/afs_osidnlc.c
src/afs/afs_vcache.c

index 07a5d31e3d15c0d2160c6d39a180c60f9ac313e0..ed845d10e11a55176990cacfc4031e16a918e4dc 100644 (file)
@@ -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))) {
index cee981484153834ab4283502d3f8222d33448008..5f050ec27246943788d971b9dac20e94b7c447b8 100644 (file)
@@ -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
index e4186ce5d6e5274843a57efa1f6e1c442cb5cdfc..a55e59c47c091f4042d1fc24ad400ffb93c4ffdb 100644 (file)
@@ -602,6 +602,18 @@ afs_FlushReclaimedVcaches(void)
            tmpReclaimedVCList = tvc;
            printf("Reclaim list flush %x failed: %d\n", 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;