windows-callback-revoke-multi-cell-servers-20071225
[openafs.git] / src / WINNT / afsd / cm_callback.c
index cfab90d..d4d28ff 100644 (file)
@@ -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
@@ -353,7 +355,6 @@ SRXAFSCB_CallBack(struct rx_call *callp, AFSCBFids *fidsArrayp, AFSCBs *cbsArray
     unsigned long host = 0;
     unsigned short port = 0;
     cm_server_t *tsp = NULL;
-    cm_cell_t * cellp = NULL;
 
     MUTEX_ENTER(&callp->lock);
 
@@ -361,14 +362,13 @@ SRXAFSCB_CallBack(struct rx_call *callp, AFSCBFids *fidsArrayp, AFSCBs *cbsArray
         host = rx_HostOf(peerp);
         port = rx_PortOf(peerp);
 
-        tsp = cm_FindServerByIP(host, CM_SERVER_FILE);
-        if (tsp)
-            cellp = tsp->cellp;
+        osi_Log2(afsd_logp, "SRXAFSCB_CallBack from host 0x%x port %d",
+                  ntohl(host),
+                  ntohs(port));
+    } else {
+        osi_Log0(afsd_logp, "SRXAFSCB_CallBack from unknown host");
     }
 
-    osi_Log2(afsd_logp, "SRXAFSCB_CallBack from host 0x%x port %d",
-              ntohl(host),
-              ntohs(port));
 
     for (i=0; i < (long) fidsArrayp->AFSCBFids_len; i++) {
         tfidp = &fidsArrayp->AFSCBFids_val[i];
@@ -376,9 +376,9 @@ SRXAFSCB_CallBack(struct rx_call *callp, AFSCBFids *fidsArrayp, AFSCBs *cbsArray
         if (tfidp->Volume == 0)
             continue;   /* means don't do anything */
         else if (tfidp->Vnode == 0)
-            cm_RevokeVolumeCallback(callp, cellp, tfidp);
+            cm_RevokeVolumeCallback(callp, NULL, tfidp);
         else
-            cm_RevokeCallback(callp, cellp, tfidp);
+            cm_RevokeCallback(callp, NULL, tfidp);
     }
 
     MUTEX_EXIT(&callp->lock);
@@ -1836,7 +1836,7 @@ void cm_CheckCBExpiration(void)
         
     osi_Log0(afsd_logp, "CheckCBExpiration");
 
-    now = osi_Time();
+    now = time(NULL);
     lock_ObtainWrite(&cm_scacheLock);
     for (i=0; i<cm_data.scacheHashTableSize; i++) {
         for (scp = cm_data.scacheHashTablep[i]; scp; scp=scp->nextp) {
@@ -1899,8 +1899,6 @@ cm_GiveUpAllCallbacks(cm_server_t *tsp, afs_int32 markDown)
                 tsp->downTime = osi_Time();
             }
             cm_ForceNewConnections(tsp);
-            lock_ReleaseMutex(&tsp->mx);
-
             /* Now update the volume status */
             for (tsrvp = tsp->vols; tsrvp; tsrvp = tsrvp->nextp) {
                 for (i=0; i<NUM_SERVER_VOLS; i++) {
@@ -1918,6 +1916,7 @@ cm_GiveUpAllCallbacks(cm_server_t *tsp, afs_int32 markDown)
                     }
                 }
             }
+            lock_ReleaseMutex(&tsp->mx);
         }
     }
 }
@@ -1927,6 +1926,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);