cm_aclent_t *aclp;
cm_aclent_t **laclpp;
int found = 0;
+ int callback = 0;
lock_ObtainWrite(&scp->rw);
lock_ObtainWrite(&cm_aclLock);
aclp->userp = NULL;
aclp->backp = (struct cm_scache *) 0;
found = 1;
- if (RDR_Initialized && cm_HaveCallback(scp))
- RDR_InvalidateObject(scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique,
- scp->fid.hash, scp->fileType, AFS_INVALIDATE_CREDS);
break;
}
}
lock_ReleaseWrite(&cm_aclLock);
+ if (found)
+ callback = cm_HaveCallback(scp);
lock_ReleaseWrite(&scp->rw);
+
+ if (found && callback && RDR_Initialized)
+ RDR_InvalidateObject(scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique,
+ scp->fid.hash, scp->fileType, AFS_INVALIDATE_CREDS);
}
/*
long code;
long bufferPos;
afs_uint32 i;
+ afs_uint32 invalidate = 0;
/* assert that cm_bufCreateLock is held in write mode */
lock_AssertWrite(&scp->bufCreateLock);
lock_ReleaseWrite(&buf_globalLock);
}
} else {
- if (RDR_Initialized)
- RDR_InvalidateObject(scp->fid.cell, scp->fid.volume, scp->fid.vnode,
- scp->fid.unique, scp->fid.hash,
- scp->fileType, AFS_INVALIDATE_SMB);
+ invalidate = 1;
}
_InterlockedAnd(&bufp->flags, ~CM_BUF_DIRTY);
bufp->error = 0;
buf_ValidateBufQueues();
#endif /* TESTING */
+ if (invalidate && RDR_Initialized)
+ RDR_InvalidateObject(scp->fid.cell, scp->fid.volume, scp->fid.vnode,
+ scp->fid.unique, scp->fid.hash,
+ scp->fileType, AFS_INVALIDATE_SMB);
+
/* done */
return code;
}
cm_dirOp_t dirop;
cm_scache_t *scp = NULL;
int free_fnamep = FALSE;
+ int invalidate = 0;
memset(&volSync, 0, sizeof(volSync));
cm_dnlcRemove(dscp, cnamep);
if (code == 0) {
cm_MergeStatus(NULL, dscp, &newDirStatus, &volSync, userp, reqp, CM_MERGEFLAG_DIROP);
- if (RDR_Initialized &&
- scp->fileType != CM_SCACHETYPE_FILE && scp->fileType != CM_SCACHETYPE_DIRECTORY)
- RDR_InvalidateObject(dscp->fid.cell, dscp->fid.volume, dscp->fid.vnode,
- dscp->fid.unique, dscp->fid.hash,
- dscp->fileType, AFS_INVALIDATE_DATA_VERSION);
+ invalidate = 1;
} else {
InterlockedDecrement(&scp->activeRPCs);
if (code == CM_ERROR_NOSUCHFILE) {
}
cm_EndDirOp(&dirop);
+ if (invalidate && RDR_Initialized &&
+ scp->fileType != CM_SCACHETYPE_FILE && scp->fileType != CM_SCACHETYPE_DIRECTORY)
+ RDR_InvalidateObject(dscp->fid.cell, dscp->fid.volume, dscp->fid.vnode,
+ dscp->fid.unique, dscp->fid.hash,
+ dscp->fileType, AFS_INVALIDATE_DATA_VERSION);
+
if (scp) {
cm_ReleaseSCache(scp);
if (code == 0) {
struct rx_connection * rxconnp;
cm_dirOp_t dirop;
fschar_t * fnamep = NULL;
+ int invalidate = 0;
memset(&volSync, 0, sizeof(volSync));
lock_ObtainWrite(&dscp->rw);
if (code == 0) {
cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, reqp, CM_MERGEFLAG_DIROP);
- if (RDR_Initialized)
- RDR_InvalidateObject(dscp->fid.cell, dscp->fid.volume, dscp->fid.vnode,
- dscp->fid.unique, dscp->fid.hash,
- dscp->fileType, AFS_INVALIDATE_DATA_VERSION);
+ invalidate = 1;
} else {
InterlockedDecrement(&dscp->activeRPCs);
}
}
cm_EndDirOp(&dirop);
+ if (invalidate && RDR_Initialized)
+ RDR_InvalidateObject(dscp->fid.cell, dscp->fid.volume, dscp->fid.vnode,
+ dscp->fid.unique, dscp->fid.hash,
+ dscp->fileType, AFS_INVALIDATE_DATA_VERSION);
+
/* Update the linked object status */
if (code == 0) {
lock_ObtainWrite(&sscp->rw);