From 9d44937928dbd20418f6b9b4fb0fd697f6348ddc Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 29 Jul 2011 18:07:42 -0400 Subject: [PATCH] Windows: Do not release locks on deleted files If the cm_scache_t flags include CM_SCACHEFLAG_DELETED, do not bother releasing an outstanding file lock to the file server. The lock went away when the file was deleted. Any attempt to release will fail with VNOVNODE which is translated locally into CM_ERROR_BADFD. If a RXAFS_ReleaseLock RPC fails with VNOVNODE, treat it as success. Reviewed-on: http://gerrit.openafs.org/5118 Tested-by: BuildBot Tested-by: Jeffrey Altman Reviewed-by: Jeffrey Altman (cherry picked from fa11f71f040b2e6856047c53fdd902109e5c6e52) Change-Id: I4b70abab200ea50b419e215f4b3f3b4d3d7ab484 Reviewed-on: http://gerrit.openafs.org/5144 Tested-by: BuildBot Tested-by: Jeffrey Altman Reviewed-by: Jeffrey Altman --- src/WINNT/afsd/cm_vnodeops.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index d5d41f1de..09551f1bb 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -4406,6 +4406,11 @@ long cm_IntReleaseLock(cm_scache_t * scp, cm_user_t * userp, struct rx_connection * rxconnp; AFSVolSync volSync; + if (scp->flags & CM_SCACHEFLAG_DELETED) { + osi_Log1(afsd_logp, "CALL ReleaseLock on Deleted Vnode scp 0x%p", scp); + return 0; + } + memset(&volSync, 0, sizeof(volSync)); tfid.Volume = scp->fid.volume; @@ -4438,7 +4443,7 @@ long cm_IntReleaseLock(cm_scache_t * scp, cm_user_t * userp, lock_ObtainWrite(&scp->rw); - return code; + return (code != CM_ERROR_BADFD ? code : 0); } /* called with scp->rw held. May release it during processing, but -- 2.39.5