*/
goto out;
}
- afs_ServerDown(sa);
+ afs_ServerDown(sa, acode);
ForceNewConnections(sa); /**multi homed clients lock:afs_xsrvAddr? */
if (aerrP)
(aerrP->err_Server)++;
}
/* check for ubik errors; treat them like crashed servers */
else if (acode >= ERROR_TABLE_BASE_U && acode < ERROR_TABLE_BASE_U + 255) {
- afs_ServerDown(sa);
+ afs_ServerDown(sa, acode);
if (aerrP)
(aerrP->err_Server)++;
shouldRetry = 1; /* retryable (maybe one is working) */
extern void afs_GetCapabilities(struct server *ts);
extern void ForceAllNewConnections(void);
extern void afs_MarkServerUpOrDown(struct srvAddr *sa, int a_isDown);
-extern afs_int32 afs_ServerDown(struct srvAddr *sa);
+extern afs_int32 afs_ServerDown(struct srvAddr *sa, int code);
extern void afs_CountServers(void);
extern void afs_CheckServers(int adown, struct cell *acellp);
extern void afs_LoopServers(int adown, struct cell *acellp, int vlalso,
#endif
extern char *afs_strdup(char *s);
extern void print_internet_address(char *preamble, struct srvAddr *sa,
- char *postamble, int flag);
+ char *postamble, int flag, int code);
extern afs_int32 afs_data_pointer_to_int32(const void *p);
extern void afs_CheckLocks(void);
afs_int32
-afs_ServerDown(struct srvAddr *sa)
+afs_ServerDown(struct srvAddr *sa, int code)
{
struct server *aserver = sa->server;
afs_MarkServerUpOrDown(sa, SRVR_ISDOWN);
if (sa->sa_portal == aserver->cell->vlport)
print_internet_address
- ("afs: Lost contact with volume location server ", sa, "", 1);
+ ("afs: Lost contact with volume location server ", sa, "", 1, code);
else
print_internet_address("afs: Lost contact with file server ", sa, "",
- 1);
+ 1, code);
return 1;
} /*ServerDown */
if (tc->parent->srvr == sa) {
afs_MarkServerUpOrDown(sa, 0);
print_internet_address("afs: volume location server ", sa,
- " is back up", 2);
+ " is back up", 2, code);
}
}
if (( results[i] >= 0 ) && (sa->sa_flags & SRVADDR_ISDOWN) &&
(tc->parent->srvr == sa)) {
/* server back up */
- print_internet_address("afs: file server ", sa, " is back up", 2);
+ print_internet_address("afs: file server ", sa, " is back up", 2,
+ results[i]);
ObtainWriteLock(&afs_xserver, 244);
ObtainWriteLock(&afs_xsrvAddr, 245);
} else {
if (results[i] < 0) {
/* server crashed */
- afs_ServerDown(sa);
+ afs_ServerDown(sa, results[i]);
ForceNewConnections(sa); /* multi homed clients */
}
}
ObtainWriteLock(&afs_xserver, 723);
/* we forced a conn above; important we mark it down if needed */
if ((code < 0) && (code != RXGEN_OPCODE)) {
- afs_ServerDown(tc->parent->srvr);
+ afs_ServerDown(tc->parent->srvr, code);
ForceNewConnections(tc->parent->srvr); /* multi homed clients */
}
afs_PutConn(tc, rxconn, SHARED_LOCK);
void
print_internet_address(char *preamble, struct srvAddr *sa, char *postamble,
- int flag)
+ int flag, int code)
{
struct server *aserver = sa->server;
char *ptr = "\n";
" (multi-homed address; other same-host interfaces may still be down)\n";
}
}
- afs_warn("%s%d.%d.%d.%d in cell %s%s%s", preamble, (address >> 24),
+ afs_warn("%s%d.%d.%d.%d in cell %s%s (code %d)%s", preamble, (address >> 24),
(address >> 16) & 0xff, (address >> 8) & 0xff, (address) & 0xff,
- aserver->cell->cellName, postamble, ptr);
- afs_warnuser("%s%d.%d.%d.%d in cell %s%s%s", preamble, (address >> 24),
+ aserver->cell->cellName, postamble, code, ptr);
+ afs_warnuser("%s%d.%d.%d.%d in cell %s%s (code %d)%s", preamble, (address >> 24),
(address >> 16) & 0xff, (address >> 8) & 0xff,
- (address) & 0xff, aserver->cell->cellName, postamble, ptr);
+ (address) & 0xff, aserver->cell->cellName, postamble, code, ptr);
} /*print_internet_address */