}
/* make the RPC */
+ InterlockedIncrement(&dscp->activeRPCs);
+
afsFid.Volume = dscp->fid.volume;
afsFid.Vnode = dscp->fid.vnode;
afsFid.Unique = dscp->fid.unique;
RDR_InvalidateObject(dscp->fid.cell, dscp->fid.volume, dscp->fid.vnode,
dscp->fid.unique, dscp->fid.hash,
dscp->fileType, AFS_INVALIDATE_DATA_VERSION);
- } else if (code == CM_ERROR_NOSUCHFILE) {
- /* windows would not have allowed the request to delete the file
- * if it did not believe the file existed. therefore, we must
- * have an inconsistent view of the world.
- */
- dscp->cbServerp = NULL;
+ } else {
+ InterlockedDecrement(&scp->activeRPCs);
+ if (code == CM_ERROR_NOSUCHFILE) {
+ /* windows would not have allowed the request to delete the file
+ * if it did not believe the file existed. therefore, we must
+ * have an inconsistent view of the world.
+ */
+ dscp->cbServerp = NULL;
+ }
}
cm_SyncOpDone(dscp, NULL, sflags);
lock_ReleaseWrite(&dscp->rw);
&bbp->callbacks[j],
&volSync,
CM_CALLBACK_MAINTAINCOUNT);
+ InterlockedIncrement(&scp->activeRPCs);
cm_MergeStatus(dscp, scp, &bbp->stats[j], &volSync, userp, reqp, 0);
lock_ReleaseWrite(&scp->rw);
} else {
lock_ReleaseRead(&scp->rw);
/* now make the RPC */
+ InterlockedIncrement(&scp->activeRPCs);
+
osi_Log1(afsd_logp, "CALL StoreStatus scp 0x%p", scp);
do {
code = cm_ConnFromFID(&scp->fid, userp, reqp, &connp);
if (code == 0)
cm_MergeStatus(NULL, scp, &afsOutStatus, &volSync, userp, reqp,
CM_MERGEFLAG_FORCE|CM_MERGEFLAG_STOREDATA);
+ else
+ InterlockedDecrement(&scp->activeRPCs);
cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_STORESTATUS);
/* if we're changing the mode bits, discard the ACL cache,
cm_StatusFromAttr(&inStatus, NULL, attrp);
/* try the RPC now */
+ InterlockedIncrement(&dscp->activeRPCs);
osi_Log1(afsd_logp, "CALL CreateFile scp 0x%p", dscp);
do {
code = cm_ConnFromFID(&dscp->fid, userp, reqp, &connp);
lock_ObtainWrite(&dscp->rw);
if (code == 0)
cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, reqp, CM_MERGEFLAG_DIROP);
+ else
+ InterlockedDecrement(&dscp->activeRPCs);
cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA);
lock_ReleaseWrite(&dscp->rw);
if (!cm_HaveCallback(scp)) {
cm_EndCallbackGrantingCall(scp, &cbReq,
&newFileCallback, &volSync, 0);
+ InterlockedIncrement(&scp->activeRPCs);
cm_MergeStatus(dscp, scp, &newFileStatus, &volSync,
userp, reqp, 0);
didEnd = 1;
cm_StatusFromAttr(&inStatus, NULL, attrp);
/* try the RPC now */
+ InterlockedIncrement(&dscp->activeRPCs);
osi_Log1(afsd_logp, "CALL MakeDir scp 0x%p", dscp);
do {
code = cm_ConnFromFID(&dscp->fid, userp, reqp, &connp);
lock_ObtainWrite(&dscp->rw);
if (code == 0)
cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, reqp, CM_MERGEFLAG_DIROP);
+ else
+ InterlockedDecrement(&dscp->activeRPCs);
cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA);
lock_ReleaseWrite(&dscp->rw);
if (!cm_HaveCallback(scp)) {
cm_EndCallbackGrantingCall(scp, &cbReq,
&newDirCallback, &volSync, 0);
+ InterlockedIncrement(&scp->activeRPCs);
cm_MergeStatus(dscp, scp, &newDirStatus, &volSync,
userp, reqp, 0);
didEnd = 1;
fnamep = cm_ClientStringToFsStringAlloc(cnamep, -1, NULL);
/* try the RPC now */
+ InterlockedIncrement(&dscp->activeRPCs);
osi_Log1(afsd_logp, "CALL Link scp 0x%p", dscp);
do {
code = cm_ConnFromFID(&dscp->fid, userp, reqp, &connp);
RDR_InvalidateObject(dscp->fid.cell, dscp->fid.volume, dscp->fid.vnode,
dscp->fid.unique, dscp->fid.hash,
dscp->fileType, AFS_INVALIDATE_DATA_VERSION);
+ } else {
+ InterlockedDecrement(&dscp->activeRPCs);
}
cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA);
lock_ReleaseWrite(&dscp->rw);
/* Update the linked object status */
if (code == 0) {
lock_ObtainWrite(&sscp->rw);
+ InterlockedIncrement(&sscp->activeRPCs);
cm_MergeStatus(NULL, sscp, &newLinkStatus, &volSync, userp, reqp, 0);
lock_ReleaseWrite(&sscp->rw);
}
cm_StatusFromAttr(&inStatus, NULL, attrp);
/* try the RPC now */
+ InterlockedIncrement(&dscp->activeRPCs);
osi_Log1(afsd_logp, "CALL Symlink scp 0x%p", dscp);
do {
code = cm_ConnFromFID(&dscp->fid, userp, reqp, &connp);
lock_ObtainWrite(&dscp->rw);
if (code == 0)
cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, reqp, CM_MERGEFLAG_DIROP);
+ else
+ InterlockedDecrement(&dscp->activeRPCs);
cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA);
lock_ReleaseWrite(&dscp->rw);
if (code == 0) {
lock_ObtainWrite(&scp->rw);
if (!cm_HaveCallback(scp)) {
+ InterlockedIncrement(&scp->activeRPCs);
cm_MergeStatus(dscp, scp, &newLinkStatus, &volSync,
userp, reqp, 0);
}
didEnd = 0;
/* try the RPC now */
+ InterlockedIncrement(&dscp->activeRPCs);
osi_Log1(afsd_logp, "CALL RemoveDir scp 0x%p", dscp);
do {
code = cm_ConnFromFID(&dscp->fid, userp, reqp, &connp);
if (code == 0) {
cm_dnlcRemove(dscp, cnamep);
cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, reqp, CM_MERGEFLAG_DIROP);
+ } else {
+ InterlockedDecrement(&dscp->activeRPCs);
}
cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA);
lock_ReleaseWrite(&dscp->rw);
newNamep = cm_ClientStringToFsStringAlloc(cNewNamep, -1, NULL);
/* try the RPC now */
+ InterlockedIncrement(&oldDscp->activeRPCs);
+ if (!oneDir)
+ InterlockedIncrement(&newDscp->activeRPCs);
osi_Log2(afsd_logp, "CALL Rename old scp 0x%p new scp 0x%p",
oldDscp, newDscp);
do {
if (code == 0)
cm_MergeStatus(NULL, oldDscp, &updatedOldDirStatus, &volSync,
userp, reqp, CM_MERGEFLAG_DIROP);
+ else
+ InterlockedDecrement(&oldDscp->activeRPCs);
cm_SyncOpDone(oldDscp, NULL, CM_SCACHESYNC_STOREDATA);
lock_ReleaseWrite(&oldDscp->rw);
if (code == 0)
cm_MergeStatus(NULL, newDscp, &updatedNewDirStatus, &volSync,
userp, reqp, CM_MERGEFLAG_DIROP);
+ else
+ InterlockedIncrement(&newDscp->activeRPCs);
cm_SyncOpDone(newDscp, NULL, CM_SCACHESYNC_STOREDATA);
lock_ReleaseWrite(&newDscp->rw);