]> 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)
committerJeffrey Altman <jaltman@openafs.org>
Tue, 18 Jan 2011 17:52:49 +0000 (09:52 -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.

Change-Id: Icb83ba77984075216a44cdeba689bc05e98ed92a
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>
src/WINNT/afsd/cm_conn.c
src/WINNT/afsd/cm_server.c

index ec2b1c3f99334244b943482058d8e39cb7f269ba..cf90ef6cc3b4f718aea8b638a04c07a71637f62b 100644 (file)
@@ -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",
index 4a6931bb5003b5e42f59f05ed71b82804908a33a..7829cbd135cf4d0bc57c3afb7c45ea7fd27747e3 100644 (file)
@@ -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;
 }