From 47ef2e4e514234bb947cdf325634ad0b8ae5d7da Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sat, 28 Jun 2014 23:03:45 -0400 Subject: [PATCH] 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 --- src/WINNT/afsd/cm_vnodeops.c | 8 ++------ src/WINNT/afsrdr/user/RDRFunction.c | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 16 deletions(-) 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); -- 2.39.5