From a36705f48889821ff38c6f8fc72c5ccb980e14ac Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 29 Jul 2011 18:09:53 -0400 Subject: [PATCH] Windows: Do not execute tasks on deleted files If a cm_BkgDaemon thread finds a queued request whose cm_scache_t has the CM_SCACHEFLAG_DELETED flag set, do not execute the request and fail it immediately with CM_ERROR_BADFD. Any attempt to execute the request will fail with VNOVNODE from the file server. Reviewed-on: http://gerrit.openafs.org/5120 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman (cherry picked from afc3ded56795d30e4e0f38d11f8302568943c49b) Change-Id: I92610c215d7d44ceb1894bb3ab7784534a66e452 Reviewed-on: http://gerrit.openafs.org/5146 Tested-by: BuildBot Tested-by: Jeffrey Altman Reviewed-by: Jeffrey Altman --- src/WINNT/afsd/cm_daemon.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/WINNT/afsd/cm_daemon.c b/src/WINNT/afsd/cm_daemon.c index 4f809f578..f5f73e48c 100644 --- a/src/WINNT/afsd/cm_daemon.c +++ b/src/WINNT/afsd/cm_daemon.c @@ -114,7 +114,8 @@ void cm_BkgDaemon(void * parm) /* we found a request */ for (rp = cm_bkgListEndp; rp; rp = (cm_bkgRequest_t *) osi_QPrev(&rp->q)) { - if (cm_ServerAvailable(&rp->scp->fid, rp->userp)) + if (cm_ServerAvailable(&rp->scp->fid, rp->userp) || + rp->scp->flags & CM_SCACHEFLAG_DELETED) break; } if (rp == NULL) { @@ -131,13 +132,18 @@ void cm_BkgDaemon(void * parm) osi_Log1(afsd_logp,"cm_BkgDaemon processing request 0x%p", rp); + if (rp->scp->flags & CM_SCACHEFLAG_DELETED) { + osi_Log1(afsd_logp,"cm_BkgDaemon DELETED scp 0x%x",rp->scp); + code = CM_ERROR_BADFD; + } else { #ifdef DEBUG_REFCOUNT - osi_Log2(afsd_logp,"cm_BkgDaemon (before) scp 0x%x ref %d",rp->scp, rp->scp->refCount); + osi_Log2(afsd_logp,"cm_BkgDaemon (before) scp 0x%x ref %d",rp->scp, rp->scp->refCount); #endif - code = (*rp->procp)(rp->scp, rp->p1, rp->p2, rp->p3, rp->p4, rp->userp); + code = (*rp->procp)(rp->scp, rp->p1, rp->p2, rp->p3, rp->p4, rp->userp); #ifdef DEBUG_REFCOUNT - osi_Log2(afsd_logp,"cm_BkgDaemon (after) scp 0x%x ref %d",rp->scp, rp->scp->refCount); + osi_Log2(afsd_logp,"cm_BkgDaemon (after) scp 0x%x ref %d",rp->scp, rp->scp->refCount); #endif + } /* * Keep the following list synchronized with the -- 2.39.5