DEVEL15-windows-giveupallcallbacks-20071204
authorJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 4 Dec 2007 15:48:48 +0000 (15:48 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 4 Dec 2007 15:48:48 +0000 (15:48 +0000)
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
src/WINNT/afsd/cm_callback.c
src/WINNT/afsd/cm_callback.h

index ff4ebb4..a8c46b2 100644 (file)
@@ -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;
index 7f84b21..a9689ff 100644 (file)
@@ -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);
index 7d6ad09..eff1a47 100644 (file)
@@ -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__ */