DEVEL15-linux-warning-reduction-20090318
[openafs.git] / src / afs / afs_server.c
index 520757a..19f3092 100644 (file)
@@ -239,14 +239,14 @@ afs_MarkServerUpOrDown(struct srvAddr *sa, int a_isDown)
 }                              /*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
@@ -254,7 +254,7 @@ afs_ServerDown(struct srvAddr *sa)
     else
        print_internet_address("afs: Lost contact with file server ", sa, "",
                               1);
-
+    return 1;
 }                              /*ServerDown */
 
 
@@ -275,7 +275,7 @@ afs_HaveCallBacksFrom(struct server *aserver)
             * from the required host
             */
            if (aserver == tvc->callback && tvc->cbExpires >= now
-               && ((tvc->states & CRO) == 0))
+               && ((tvc->f.states & CRO) == 0))
                return 1;
        }
     }
@@ -288,7 +288,7 @@ static void
 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);
@@ -531,7 +531,7 @@ afs_CheckServers(int adown, struct cell *acellp)
     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;
@@ -540,14 +540,21 @@ afs_CheckServers(int adown, struct cell *acellp)
     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;
@@ -577,7 +584,7 @@ afs_CheckServers(int adown, struct cell *acellp)
     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));
@@ -636,7 +643,7 @@ afs_CheckServers(int adown, struct cell *acellp)
     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)
@@ -745,7 +752,7 @@ afs_CheckServers(int adown, struct cell *acellp)
     }
     
     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));
@@ -1129,7 +1136,7 @@ afsi_SetServerIPRank(struct srvAddr *sa, afs_int32 addr,
            sa->sa_iprank = afs_min(sa->sa_iprank, MED);
        }
     }
-    return 0;
+    return;
 }
 #else /* AFS_USERSPACE_IP_ADDR */
 #if (! defined(AFS_SUN5_ENV)) && !defined(AFS_DARWIN60_ENV) && defined(USEIFADDR)
@@ -1845,6 +1852,61 @@ void afs_ActivateServer(struct srvAddr *sap) {
     }
 }
 
+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()
 {