From 93ad76c5d410856133d39c57ed4981ccf0de798d Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 9 May 2006 06:20:40 +0000 Subject: [PATCH] STABLE14-windows-addr-change-mods-20060509 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 | 3 ++- src/WINNT/afsd/cm_server.c | 14 ++++++++++++++ src/WINNT/afsd/cm_server.h | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/WINNT/afsd/cm_daemon.c b/src/WINNT/afsd/cm_daemon.c index d80e3ccc0..7243dd620 100644 --- a/src/WINNT/afsd/cm_daemon.c +++ b/src/WINNT/afsd/cm_daemon.c @@ -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(); } } diff --git a/src/WINNT/afsd/cm_server.c b/src/WINNT/afsd/cm_server.c index 7fc5a98f0..2e8e101b9 100644 --- a/src/WINNT/afsd/cm_server.c +++ b/src/WINNT/afsd/cm_server.c @@ -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, diff --git a/src/WINNT/afsd/cm_server.h b/src/WINNT/afsd/cm_server.h index 901fe5ddf..4c9ebdcea 100644 --- a/src/WINNT/afsd/cm_server.h +++ b/src/WINNT/afsd/cm_server.h @@ -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__ */ -- 2.39.5