From b33b34cb1558f4015609603037a0b3c2561684f0 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 4 Dec 2007 15:48:48 +0000 Subject: [PATCH] DEVEL15-windows-giveupallcallbacks-20071204 LICENSE IPL10 Add a registry value, GiveUpAllCallBacks, that can be used to enable/disable the use of the GiveUpAllCallBacks RPC. Due to the fact that calling this RPC can destablize pre-1.4.6 file servers since they do not include DELTA giveupallcallbacks-locking-20071121, the default is being set to disabled. We can re-enable the functionality by default only after sufficient time has been given for orgs to update their file servers. (cherry picked from commit 1c33df3870bffd4aa2eaf43d8ec56a75a1a3cd0f) --- src/WINNT/afsd/afsd_init.c | 9 +++++++++ src/WINNT/afsd/cm_callback.c | 5 +++++ src/WINNT/afsd/cm_callback.h | 2 ++ 3 files changed, 16 insertions(+) diff --git a/src/WINNT/afsd/afsd_init.c b/src/WINNT/afsd/afsd_init.c index ff4ebb4bd..a8c46b221 100644 --- a/src/WINNT/afsd/afsd_init.c +++ b/src/WINNT/afsd/afsd_init.c @@ -47,6 +47,7 @@ extern int cm_deleteReadOnly; extern afs_int32 cm_BPlusTrees; #endif extern afs_int32 cm_OfflineROIsValid; +extern afs_int32 cm_giveUpAllCBs; extern const char **smb_ExecutableExtensions; osi_log_t *afsd_logp; @@ -1131,6 +1132,14 @@ int afsd_InitCM(char **reasonP) } afsi_log("CM OfflineReadOnlyIsValid is %u", cm_deleteReadOnly); + dummyLen = sizeof(DWORD); + code = RegQueryValueEx(parmKey, "GiveUpAllCallBacks", NULL, NULL, + (BYTE *) &dwValue, &dummyLen); + if (code == ERROR_SUCCESS) { + cm_giveUpAllCBs = (unsigned short) dwValue; + } + afsi_log("CM GiveUpAllCallBacks is %u", cm_giveUpAllCBs); + RegCloseKey (parmKey); cacheBlocks = ((afs_uint64)cacheSize * 1024) / blockSize; diff --git a/src/WINNT/afsd/cm_callback.c b/src/WINNT/afsd/cm_callback.c index 7f84b21c9..a9689ffbd 100644 --- a/src/WINNT/afsd/cm_callback.c +++ b/src/WINNT/afsd/cm_callback.c @@ -36,6 +36,8 @@ osi_rwlock_t cm_callbackLock; afs_int32 cm_OfflineROIsValid = 0; +afs_int32 cm_giveUpAllCBs = 0; + #ifdef AFS_FREELANCE_CLIENT extern osi_mutex_t cm_Freelance_Lock; #endif @@ -1931,6 +1933,9 @@ cm_GiveUpAllCallbacksAllServers(afs_int32 markDown) { cm_server_t *tsp; + if (!cm_giveUpAllCBs) + return; + lock_ObtainWrite(&cm_serverLock); for (tsp = cm_allServersp; tsp; tsp = tsp->allNextp) { cm_GetServerNoLock(tsp); diff --git a/src/WINNT/afsd/cm_callback.h b/src/WINNT/afsd/cm_callback.h index 7d6ad0927..eff1a47a1 100644 --- a/src/WINNT/afsd/cm_callback.h +++ b/src/WINNT/afsd/cm_callback.h @@ -73,4 +73,6 @@ extern void cm_GiveUpAllCallbacks(cm_server_t *tsp, afs_int32 markDown); extern void cm_GiveUpAllCallbacksAllServers(afs_int32 markDown); extern afs_int32 cm_OfflineROIsValid; + +extern afs_int32 cm_giveUpAllCBs; #endif /* _CM_CALLBACK_H_ENV__ */ -- 2.39.5