From f25cbdf09ff890846a68f619ccb1d00ab2b3c7a8 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 14 Jan 2011 00:22:39 -0500 Subject: [PATCH] Windows: use cm_ServerEqual() in cm_Analyze() In cm_Analyze() when processing VNOVOL, VMOVED or VOFFLINE errors do not use pointer equivalence as the test to determine if a server is affected by the error. Use cm_ServerEqual() instead. Fix cm_ServerEqual() to work even when both cm_server_t objects are not UUID aware. Change-Id: Icb83ba77984075216a44cdeba689bc05e98ed92a Reviewed-on: http://gerrit.openafs.org/3659 Tested-by: BuildBot Reviewed-by: Derrick Brashear Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsd/cm_conn.c | 6 +++--- src/WINNT/afsd/cm_server.c | 11 ++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/WINNT/afsd/cm_conn.c b/src/WINNT/afsd/cm_conn.c index ec2b1c3f9..cf90ef6cc 100644 --- a/src/WINNT/afsd/cm_conn.c +++ b/src/WINNT/afsd/cm_conn.c @@ -528,7 +528,7 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, switch ( errorCode ) { case VNOVOL: msgID = MSG_SERVER_REPORTS_VNOVOL; - format = "Server %s reported volume %d in cell %s as not attached (does not exist)."; + format = "Server %s reported volume %d in cell %s as not attached (may have been moved or deleted)."; break; case VMOVED: msgID = MSG_SERVER_REPORTS_VMOVED; @@ -554,7 +554,7 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, if (fidp) { /* File Server query */ if (serverp) { - /* Log server being offline for this volume */ + /* Log server being unavailable for this volume */ sprintf(addr, "%d.%d.%d.%d", ((serverp->addr.sin_addr.s_addr & 0xff)), ((serverp->addr.sin_addr.s_addr & 0xff00)>> 8), @@ -622,7 +622,7 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, ((tsrp->server->addr.sin_addr.s_addr & 0xff0000)>> 16), ((tsrp->server->addr.sin_addr.s_addr & 0xff000000)>> 24)); - if (tsrp->server == serverp) { + if (cm_ServerEqual(tsrp->server, serverp)) { /* REDIRECT */ if (errorCode == VMOVED || errorCode == VNOVOL) { osi_Log2(afsd_logp, "volume %d not present on server %s", diff --git a/src/WINNT/afsd/cm_server.c b/src/WINNT/afsd/cm_server.c index 4a6931bb5..7829cbd13 100644 --- a/src/WINNT/afsd/cm_server.c +++ b/src/WINNT/afsd/cm_server.c @@ -1358,7 +1358,16 @@ int cm_ServerEqual(cm_server_t *srv1, cm_server_t *srv2) /* Both support UUID */ if (UuidEqual((UUID *)&srv1->uuid, (UUID *)&srv2->uuid, &status)) return 1; - } + } else { + if (srv1->flags & CM_SERVERFLAG_UUID) + return 0; + + /* Neither support UUID so perform an addr/port comparison */ + if ( srv1->addr.sin_family == srv2->addr.sin_family && + srv1->addr.sin_addr.s_addr == srv2->addr.sin_addr.s_addr && + srv1->addr.sin_port == srv2->addr.sin_port ) + return 1; + } return 0; } -- 2.39.5