From: Simon Wilkinson Date: Mon, 25 Oct 2010 09:14:12 +0000 (+0100) Subject: rx: Don't let timeouts force fast recovery X-Git-Tag: upstream/1.6.0.pre7^2~36 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=b62c76954383b2b1f6e8d55f0abcfa6ad97f8980;p=packages%2Fo%2Fopenafs.git rx: Don't let timeouts force fast recovery 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 Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear Change-Id: I5b5b154d78183621c160537172d7c0a3789114e6 Reviewed-on: http://gerrit.openafs.org/4934 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- diff --git a/src/rx/rx.c b/src/rx/rx.c index a222c80ba..7ae9980df 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -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) {