]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
rx: Don't let timeouts force fast recovery
authorSimon Wilkinson <sxw@your-file-system.com>
Mon, 25 Oct 2010 09:14:12 +0000 (10:14 +0100)
committerDerrick Brashear <shadow@dementia.org>
Sat, 9 Jul 2011 05:05:16 +0000 (22:05 -0700)
The current RX implementation goes into fast recovery whenever a
timeout occurs. This is incredibly wasteful, particularly on fast
connections. So, remove this in favour of TCP style behaviour.

(cherry picked from commit 36e2d13b55085c996d38b30d003296c602ef8ee3)
Reviewed-on: http://gerrit.openafs.org/3138
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Change-Id: I5b5b154d78183621c160537172d7c0a3789114e6
Reviewed-on: http://gerrit.openafs.org/4934
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
src/rx/rx.c

index a222c80bae896f1b3753555306244a047fe94127..7ae9980df9e79029a06a02324bbedede55eda454 100644 (file)
@@ -5990,52 +5990,16 @@ rxi_Start(struct rxevent *event,
         MUTEX_EXIT(&rx_refcnt_mutex);
        call->resendEvent = NULL;
 
-       if (rxi_busyChannelError && (call->flags & RX_CALL_PEER_BUSY)) {
-           rxi_CheckBusy(call);
-       }
-
        if (queue_IsEmpty(&call->tq)) {
            /* Nothing to do. This means that we've been raced, and that an
             * ACK has come in between when we were triggered, and when we
             * actually got to run. */
            return;
        }
-#ifdef  AFS_GLOBAL_RXLOCK_KERNEL
-        if (call->flags & RX_CALL_FAST_RECOVER_WAIT) {
-           /* someone else is waiting to start recovery */
-           return;
-        }
-       call->flags |= RX_CALL_FAST_RECOVER_WAIT;
-       rxi_WaitforTQBusy(call);
-#endif /* AFS_GLOBAL_RXLOCK_KERNEL */
-       call->flags &= ~RX_CALL_FAST_RECOVER_WAIT;
-#ifdef AFS_GLOBAL_RXLOCK_KERNEL
-        if (call->error) {
-            if (rx_stats_active)
-               rx_MutexIncrement(rx_tq_debug.rxi_start_in_error, rx_stats_mutex);
-            return;
-        }
-#endif
-        call->flags |= RX_CALL_FAST_RECOVER;
 
-        if (peer->maxDgramPackets > 1) {
-            call->MTU = RX_JUMBOBUFFERSIZE + RX_HEADER_SIZE;
-        } else {
-            call->MTU = MIN(peer->natMTU, peer->maxMTU);
-        }
-        call->ssthresh = MAX(4, MIN((int)call->cwind, (int)call->twind)) >> 1;
-        call->nDgramPackets = 1;
-        call->cwind = 1;
-        call->nextCwind = 1;
-        call->nAcks = 0;
-        call->nNacks = 0;
-        MUTEX_ENTER(&peer->peer_lock);
-        peer->MTU = call->MTU;
-        peer->cwind = call->cwind;
-        peer->nDgramPackets = 1;
-        peer->congestSeq++;
-        call->congestSeq = peer->congestSeq;
-        MUTEX_EXIT(&peer->peer_lock);
+       if (rxi_busyChannelError && (call->flags & RX_CALL_PEER_BUSY)) {
+           rxi_CheckBusy(call);
+       }
     }
 
     if (call->error) {