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

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 137c6bf5d24fce4ba1af8cfc79c18b54ad2cdfa6..a9c34bcb9d0259a5190691214f1f951075852643 100644 (file)
@@ -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;