From: Jeffrey Altman Date: Sun, 29 Jun 2014 03:03:45 +0000 (-0400) Subject: Windows: Do not sync callbacks when only need locks X-Git-Tag: upstream/1.8.0_pre1^2~599 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=47ef2e4e514234bb947cdf325634ad0b8ae5d7da;p=packages%2Fo%2Fopenafs.git Windows: Do not sync callbacks when only need locks Syncing lock operations with callback fetching is unnecessary because local lock state is not tracked via callbacks. More importantly it risks blocking the cm_LockDaemon thread which needs to be able to renew locks without obstruction. Change-Id: Iabe9bb33fef599c4eb0e876e222587ee3e2fdb49 Reviewed-on: http://gerrit.openafs.org/11415 Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index cc0692c0a..4814188ef 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -5778,9 +5778,7 @@ void cm_CheckLocks() goto post_syncopdone; code = cm_SyncOp(scp, NULL, fileLock->userp, &req, 0, - CM_SCACHESYNC_NEEDCALLBACK - | CM_SCACHESYNC_GETSTATUS - | CM_SCACHESYNC_LOCK); + CM_SCACHESYNC_LOCK); if (code) { osi_Log1(afsd_logp, @@ -6105,9 +6103,7 @@ long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead) cm_user_t * userp; code = cm_SyncOp(scp, NULL, oldFileLock->userp, &req, 0, - CM_SCACHESYNC_NEEDCALLBACK - | CM_SCACHESYNC_GETSTATUS - | CM_SCACHESYNC_LOCK); + CM_SCACHESYNC_LOCK); if (code) { osi_Log1(afsd_logp, "cm_RetryLock SyncOp failure code 0x%x", code); lock_ReleaseWrite(&cm_scacheLock); diff --git a/src/WINNT/afsrdr/user/RDRFunction.c b/src/WINNT/afsrdr/user/RDRFunction.c index e1193d24f..a80db3b20 100644 --- a/src/WINNT/afsrdr/user/RDRFunction.c +++ b/src/WINNT/afsrdr/user/RDRFunction.c @@ -2150,7 +2150,7 @@ RDR_CleanupFileEntry( IN cm_user_t *userp, bScpLocked = TRUE; } code = cm_SyncOp(scp, NULL, userp, &req, 0, - CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + CM_SCACHESYNC_LOCK); if (code) { osi_Log2(afsd_logp, "RDR_CleanupFileEntry cm_SyncOp (2) failure scp=0x%p code=0x%x", scp, code); @@ -2164,7 +2164,7 @@ RDR_CleanupFileEntry( IN cm_user_t *userp, bDeleteFile ? CM_UNLOCK_FLAG_BY_FID : 0, userp, &req); - cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_LOCK); if (code) goto on_error; @@ -2364,7 +2364,7 @@ RDR_DeleteFileEntry( IN cm_user_t *userp, if (!bCheckOnly) { /* Drop all locks since the file is being deleted */ code = cm_SyncOp(scp, NULL, userp, &req, 0, - CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + CM_SCACHESYNC_LOCK); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -2383,7 +2383,7 @@ RDR_DeleteFileEntry( IN cm_user_t *userp, CM_UNLOCK_FLAG_BY_FID, userp, &req); - cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_LOCK); lock_ReleaseWrite(&scp->rw); if (scp->fileType == CM_SCACHETYPE_DIRECTORY) @@ -5558,7 +5558,7 @@ RDR_ByteRangeLockSync( IN cm_user_t *userp, /* start by looking up the file's end */ code = cm_SyncOp(scp, NULL, userp, &req, 0, - CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + CM_SCACHESYNC_LOCK); if (code) { lock_ReleaseWrite(&scp->rw); smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); @@ -5606,7 +5606,7 @@ RDR_ByteRangeLockSync( IN cm_user_t *userp, } } - cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_LOCK); lock_ReleaseWrite(&scp->rw); cm_ReleaseSCache(scp); @@ -5684,7 +5684,7 @@ RDR_ByteRangeUnlock( IN cm_user_t *userp, /* start by looking up the file's end */ code = cm_SyncOp(scp, NULL, userp, &req, 0, - CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + CM_SCACHESYNC_LOCK); if (code) { lock_ReleaseWrite(&scp->rw); smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); @@ -5722,7 +5722,7 @@ RDR_ByteRangeUnlock( IN cm_user_t *userp, pResultCB->Result[i].Status = status; } - cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_LOCK); lock_ReleaseWrite(&scp->rw); cm_ReleaseSCache(scp); @@ -5785,7 +5785,7 @@ RDR_ByteRangeUnlockAll( IN cm_user_t *userp, /* start by looking up the file's end */ code = cm_SyncOp(scp, NULL, userp, &req, 0, - CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + CM_SCACHESYNC_LOCK); if (code) { lock_ReleaseWrite(&scp->rw); smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); @@ -5801,7 +5801,7 @@ RDR_ByteRangeUnlockAll( IN cm_user_t *userp, code = cm_UnlockByKey(scp, key, 0, userp, &req); - cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_LOCK); + cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_LOCK); lock_ReleaseWrite(&scp->rw); cm_ReleaseSCache(scp);