]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: use cm_ServerEqual() in cm_Analyze()
authorJeffrey Altman <jaltman@your-file-system.com>
Fri, 14 Jan 2011 05:22:39 +0000 (00:22 -0500)
committerDerrick Brashear <shadow@dementia.org>
Fri, 4 Feb 2011 15:07:04 +0000 (07:07 -0800)
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.

Reviewed-on: http://gerrit.openafs.org/3659
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
(cherry picked from commit f25cbdf09ff890846a68f619ccb1d00ab2b3c7a8)

Change-Id: Iabebbb0e620c42898b428352ea2ec3cb64de8d74
Reviewed-on: http://gerrit.openafs.org/3836
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/WINNT/afsd/cm_conn.c
src/WINNT/afsd/cm_server.c

index fa7c5e5d7e0b06623e955137f84c356565062efd..5ccd1feb5fd9e8ba9a504beb0afb180410ca39fb 100644 (file)
@@ -525,7 +525,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;
@@ -551,7 +551,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),
@@ -619,7 +619,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",
index c7b80a6c73aa757af156d2b62519ea0d3c9d2328..4ae7283c45366a67b82bff93c9ddd66380541760 100644 (file)
@@ -1355,7 +1355,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;
 }