windows-buf-invalidate-on-vnovnode-20080507
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 8 May 2008 06:25:42 +0000 (06:25 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 8 May 2008 06:25:42 +0000 (06:25 +0000)
LICENSE MIT

Once we know that an attempt to stablize a buffer has failed due to
VNOVNODE, stop trying to Stablize future buffers and just invalidate
all of them belonging to the same FID.

src/WINNT/afsd/cm_buf.c

index bd7eb38..d53a5c1 100644 (file)
@@ -1552,10 +1552,16 @@ long buf_FlushCleanPages(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
             buf_WaitIO(scp, bp);
             lock_ReleaseMutex(&bp->mx);
 
-            code = (*cm_buf_opsp->Stabilizep)(scp, userp, reqp);
-            if (code && code != CM_ERROR_BADFD) 
-                goto skip;
-
+            /* 
+             * if the error for the previous buffer was BADFD
+             * then all buffers for the FID are bad.  Do not
+             * attempt to stabalize.
+             */
+            if (code != CM_ERROR_BADFD) {
+                code = (*cm_buf_opsp->Stabilizep)(scp, userp, reqp);
+                if (code && code != CM_ERROR_BADFD) 
+                    goto skip;
+            }
             if (code == CM_ERROR_BADFD) {
                 /* if the scp's FID is bad its because we received VNOVNODE 
                  * when attempting to FetchStatus before the write.  This