From 1c33df3870bffd4aa2eaf43d8ec56a75a1a3cd0f Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 4 Dec 2007 15:44:56 +0000 Subject: [PATCH] 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. --- 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 64364ca5e..0e833daf5 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; @@ -1129,6 +1130,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 cfab90de0..f032e021c 100644 --- a/src/WINNT/afsd/cm_callback.c +++ b/src/WINNT/afsd/cm_callback.c @@ -32,6 +32,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 @@ -1927,6 +1929,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