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;
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),
((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",
/* 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;
}