From ef619db804d471fda3bf3f77d55e8cd4e4699b29 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Thu, 8 May 2008 06:25:42 +0000 Subject: [PATCH] windows-buf-invalidate-on-vnovnode-20080507 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 | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/WINNT/afsd/cm_buf.c b/src/WINNT/afsd/cm_buf.c index bd7eb38d3f..d53a5c1e76 100644 --- a/src/WINNT/afsd/cm_buf.c +++ b/src/WINNT/afsd/cm_buf.c @@ -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