From 1335eefeffb70b0759015d39e6732ee075537982 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sat, 6 Oct 2012 01:40:47 -0400 Subject: [PATCH] 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 --- src/WINNT/afsd/cm_vnodeops.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) 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: -- 2.39.5