} /*MarkServerUpOrDown */
-void
+afs_int32
afs_ServerDown(struct srvAddr *sa)
{
register struct server *aserver = sa->server;
AFS_STATCNT(ServerDown);
- if (aserver->flags & SRVR_ISDOWN || sa->sa_flags & SRVADDR_ISDOWN)
- return;
+ if (aserver->flags & SRVR_ISDOWN || sa->sa_flags & SRVADDR_ISDOWN)
+ return 0;
afs_MarkServerUpOrDown(sa, SRVR_ISDOWN);
if (sa->sa_portal == aserver->cell->vlport)
print_internet_address
else
print_internet_address("afs: Lost contact with file server ", sa, "",
1);
-
+ return 1;
} /*ServerDown */
* from the required host
*/
if (aserver == tvc->callback && tvc->cbExpires >= now
- && ((tvc->states & CRO) == 0))
+ && ((tvc->f.states & CRO) == 0))
return 1;
}
}
CheckVLServer(register struct srvAddr *sa, struct vrequest *areq)
{
register struct server *aserver = sa->server;
- register struct conn *tc;
+ register struct afs_conn *tc;
register afs_int32 code;
AFS_STATCNT(CheckVLServer);
struct vrequest treq;
struct server *ts;
struct srvAddr *sa;
- struct conn *tc;
+ struct afs_conn *tc;
afs_int32 i, j;
afs_int32 code;
afs_int32 start, end = 0, delta;
char tbuffer[CVBS];
int srvAddrCount;
struct srvAddr **addrs;
- struct conn **conns;
+ struct afs_conn **conns;
int nconns;
struct rx_connection **rxconns;
afs_int32 *conntimer, *deltas, *results;
AFS_STATCNT(afs_CheckServers);
- conns = (struct conn **)0;
+ /*
+ * No sense in doing the server checks if we are running in disconnected
+ * mode
+ */
+ if (AFS_IS_DISCONNECTED)
+ return;
+
+ conns = (struct afs_conn **)0;
rxconns = (struct rx_connection **) 0;
conntimer = 0;
nconns = 0;
ReleaseReadLock(&afs_xsrvAddr);
ReleaseReadLock(&afs_xserver);
- conns = (struct conn **)afs_osi_Alloc(j * sizeof(struct conn *));
+ conns = (struct afs_conn **)afs_osi_Alloc(j * sizeof(struct afs_conn *));
rxconns = (struct rx_connection **)afs_osi_Alloc(j * sizeof(struct rx_connection *));
conntimer = (afs_int32 *)afs_osi_Alloc(j * sizeof (afs_int32));
deltas = (afs_int32 *)afs_osi_Alloc(j * sizeof (afs_int32));
multi_Rx(rxconns,nconns)
{
tv.tv_sec = tv.tv_usec = 0;
- multi_RXAFS_GetTime(&tv.tv_sec, &tv.tv_usec);
+ multi_RXAFS_GetTime((afs_uint32 *)&tv.tv_sec, (afs_uint32 *)&tv.tv_usec);
tc = conns[multi_i];
sa = tc->srvr;
if (conntimer[multi_i] == 1)
}
afs_osi_Free(addrs, srvAddrCount * sizeof(*addrs));
- afs_osi_Free(conns, j * sizeof(struct conn *));
+ afs_osi_Free(conns, j * sizeof(struct afs_conn *));
afs_osi_Free(rxconns, j * sizeof(struct rx_connection *));
afs_osi_Free(conntimer, j * sizeof(afs_int32));
afs_osi_Free(deltas, j * sizeof(afs_int32));
}
}
+void afs_RemoveAllConns()
+{
+ int i;
+ struct server *ts, *nts;
+ struct srvAddr *sa;
+ struct afs_conn *tc, *ntc;
+
+ ObtainReadLock(&afs_xserver);
+ ObtainWriteLock(&afs_xconn, 1001);
+
+ /*printf("Destroying connections ... ");*/
+ for (i = 0; i < NSERVERS; i++) {
+ for (ts = afs_servers[i]; ts; ts = nts) {
+ nts = ts->next;
+ for (sa = ts->addr; sa; sa = sa->next_sa) {
+ if (sa->conns) {
+ tc = sa->conns;
+ while (tc) {
+ ntc = tc->next;
+ AFS_GUNLOCK();
+ rx_DestroyConnection(tc->id);
+ AFS_GLOCK();
+ afs_osi_Free(tc, sizeof(struct afs_conn));
+ tc = ntc;
+ }
+ sa->conns = NULL;
+ }
+ }
+ }
+ }
+ /*printf("done\n");*/
+
+ ReleaseWriteLock(&afs_xconn);
+ ReleaseReadLock(&afs_xserver);
+
+}
+
+void afs_MarkAllServersUp()
+{
+ int i;
+ struct server *ts;
+ struct srvAddr *sa;
+
+ ObtainWriteLock(&afs_xserver, 721);
+ ObtainWriteLock(&afs_xsrvAddr, 722);
+ for (i = 0; i< NSERVERS; i++) {
+ for (ts = afs_servers[i]; ts; ts = ts->next) {
+ for (sa = ts->addr; sa; sa = sa->next_sa) {
+ afs_MarkServerUpOrDown(sa, 0);
+ }
+ }
+ }
+ ReleaseWriteLock(&afs_xsrvAddr);
+ ReleaseWriteLock(&afs_xserver);
+}
void shutdown_server()
{