]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: Do not execute tasks on deleted files
authorJeffrey Altman <jaltman@your-file-system.com>
Fri, 29 Jul 2011 22:09:53 +0000 (18:09 -0400)
committerJeffrey Altman <jaltman@openafs.org>
Tue, 2 Aug 2011 20:50:51 +0000 (13:50 -0700)
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 <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
(cherry picked from afc3ded56795d30e4e0f38d11f8302568943c49b)

Change-Id: I92610c215d7d44ceb1894bb3ab7784534a66e452
Reviewed-on: http://gerrit.openafs.org/5146
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
src/WINNT/afsd/cm_daemon.c

index 4f809f5788ac93afcc6f3d5e6e576999293851bf..f5f73e48cac0ffb21d309a30279201f3bcdbe806 100644 (file)
@@ -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