]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-windows-addr-change-mods-20060509
authorJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 9 May 2006 06:20:40 +0000 (06:20 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 9 May 2006 06:20:40 +0000 (06:20 +0000)
When the client changes IP addresses, in order to obtain optimal
performance it must:

(1) force the replacement of all existing rx connections

(2) ping all up and down servers

(cherry picked from commit 66596cc677e8cbf7fa40ad2962ccc4547692afb5)

src/WINNT/afsd/cm_daemon.c
src/WINNT/afsd/cm_server.c
src/WINNT/afsd/cm_server.h

index d80e3ccc0a5e00afc6dc1f5b91491eef7084cdff..7243dd6209b23b023aebf31ce5077c6a95537d27 100644 (file)
@@ -58,7 +58,8 @@ void cm_IpAddrDaemon(long parm)
        if (Result == NO_ERROR && daemon_ShutdownFlag == 0) {
            osi_Log0(afsd_logp, "cm_IpAddrDaemon CheckDownServers");
            Sleep(2500);
-            cm_CheckServers(CM_FLAG_CHECKDOWNSERVERS, NULL);
+           cm_ForceNewConnectionsAllServers();
+            cm_CheckServers(CM_FLAG_CHECKUPSERVERS | CM_FLAG_CHECKDOWNSERVERS, NULL);
            smb_CheckVCs();
        }       
     }
index 7fc5a98f0bccf28e853bf74838d0bd0fdca436b2..2e8e101b90774a8f6db6ca244d2876f2177a23ac 100644 (file)
@@ -29,6 +29,20 @@ osi_rwlock_t cm_serverLock;
 
 cm_server_t *cm_allServersp;
 
+void
+cm_ForceNewConnectionsAllServers(void)
+{
+    cm_server_t *tsp;
+
+    lock_ObtainRead(&cm_serverLock);
+    for (tsp = cm_allServersp; tsp; tsp = tsp->allNextp) {
+        cm_GetServerNoLock(tsp);
+       cm_ForceNewConnections(tsp);
+        cm_PutServerNoLock(tsp);
+    }
+    lock_ReleaseRead(&cm_serverLock);
+}
+
 void cm_CheckServers(long flags, cm_cell_t *cellp)
 {
     /* ping all file servers, up or down, with unauthenticated connection,
index 901fe5ddf422bea75b2f6345bffa1a43bdf2b2d1..4c9ebdcea5093d341be220c03eed0c5fdfccfe79 100644 (file)
@@ -100,4 +100,6 @@ extern void cm_FreeServer(cm_server_t* server);
 
 extern void cm_FreeServerList(cm_serverRef_t** list);
 
+extern void cm_ForceNewConnectionsAllServers(void);
+
 #endif /*  __CM_SERVER_H_ENV__ */