From: Jeffrey Altman Date: Sat, 6 Oct 2012 05:40:47 +0000 (-0400) Subject: Windows: Do not call buf_ClearRDRFlag unlink/rmdir X-Git-Tag: upstream/1.8.0_pre1^2~1913 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=1335eefeffb70b0759015d39e6732ee075537982;p=packages%2Fo%2Fopenafs.git Windows: Do not call buf_ClearRDRFlag unlink/rmdir When processing unlink and remdir operations initiated by the SMB stack do not call buf_ClearRDRFlag. The redirector upon receiving the AFS_INVALIDATE_DELETE call will cancel outstanding extent operations, mark the FCB deleted, and tear down any held extents. Change-Id: I5203dbe5489fcfd0a1c871c3e7aa6aa1a7d65e9a Reviewed-on: http://gerrit.openafs.org/8218 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index e31a3413e..2fc73bdc9 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -1726,7 +1726,6 @@ long cm_Unlink(cm_scache_t *dscp, fschar_t *fnamep, clientchar_t * cnamep, dscp->fileType, AFS_INVALIDATE_DATA_VERSION); if (scp) { - cm_ReleaseSCache(scp); if (code == 0) { lock_ObtainWrite(&scp->rw); if (--scp->linkCount == 0) { @@ -1738,12 +1737,12 @@ long cm_Unlink(cm_scache_t *dscp, fschar_t *fnamep, clientchar_t * cnamep, } cm_DiscardSCache(scp); lock_ReleaseWrite(&scp->rw); - if (RDR_Initialized && !(reqp->flags & CM_REQ_SOURCE_REDIR) && - !RDR_InvalidateObject(scp->fid.cell, scp->fid.volume, scp->fid.vnode, - scp->fid.unique, scp->fid.hash, - scp->fileType, AFS_INVALIDATE_DELETED)) - buf_ClearRDRFlag(scp, "unlink"); + if (RDR_Initialized && !(reqp->flags & CM_REQ_SOURCE_REDIR)) + RDR_InvalidateObject(scp->fid.cell, scp->fid.volume, scp->fid.vnode, + scp->fid.unique, scp->fid.hash, + scp->fileType, AFS_INVALIDATE_DELETED); } + cm_ReleaseSCache(scp); } done: @@ -3645,7 +3644,6 @@ long cm_RemoveDir(cm_scache_t *dscp, fschar_t *fnamep, clientchar_t *cnamep, cm_ cm_EndDirOp(&dirop); if (scp) { - cm_ReleaseSCache(scp); if (code == 0) { lock_ObtainWrite(&scp->rw); scp->flags |= CM_SCACHEFLAG_DELETED; @@ -3654,12 +3652,12 @@ long cm_RemoveDir(cm_scache_t *dscp, fschar_t *fnamep, clientchar_t *cnamep, cm_ cm_RemoveSCacheFromHashTable(scp); lock_ReleaseWrite(&cm_scacheLock); lock_ReleaseWrite(&scp->rw); - if (RDR_Initialized && !(reqp->flags & CM_REQ_SOURCE_REDIR) && - !RDR_InvalidateObject(scp->fid.cell, scp->fid.volume, scp->fid.vnode, - scp->fid.unique, scp->fid.hash, - scp->fileType, AFS_INVALIDATE_DELETED)) - buf_ClearRDRFlag(scp, "rmdir"); + if (RDR_Initialized && !(reqp->flags & CM_REQ_SOURCE_REDIR)) + RDR_InvalidateObject(scp->fid.cell, scp->fid.volume, scp->fid.vnode, + scp->fid.unique, scp->fid.hash, + scp->fileType, AFS_INVALIDATE_DELETED); } + cm_ReleaseSCache(scp); } done: