From: Simon Wilkinson Date: Sat, 18 Jun 2011 14:50:08 +0000 (+0100) Subject: rx: Exit fast restart on non-duplicate ACK X-Git-Tag: upstream/1.6.0.pre7^2~29 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=45b4d17f7b38031afbb434c08ed46e4a26df9ba0;p=packages%2Fo%2Fopenafs.git rx: Exit fast restart on non-duplicate ACK The current code only exits fast restart when we receive an ACK packet that contains no missing chunks at all. On a network that is dropping a reasonable chunk of its packets, this means that we spend most of the call in fast recovery. (I originally found this by running with the intentionally drop packets feature set to 10%) TCP's fast retransmit behaviour is that we stay in fast recovery until we receive our first non-duplicate acknowledgement. In TCP that means an acknowledgement that moves the window. In RX, it is an acknowledgment that ACKs a new packet. Reviewed-on: http://gerrit.openafs.org/4869 Reviewed-by: Derrick Brashear Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman Tested-by: BuildBot (cherry picked from commit 6b833f575743d4a826750bb6913cd53232a8867f) Change-Id: I51b4de1146df032ff6e1273d8c832bded770e177 Reviewed-on: http://gerrit.openafs.org/4941 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- diff --git a/src/rx/rx.c b/src/rx/rx.c index 66e86b171..d4777367a 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -4654,7 +4654,7 @@ rxi_ReceiveAckPacket(struct rx_call *call, struct rx_packet *np, rxi_rto_packet_acked(call, istack); if (call->flags & RX_CALL_FAST_RECOVER) { - if (nNacked) { + if (newAckCount == 0) { call->cwind = MIN((int)(call->cwind + 1), rx_maxSendWindow); } else { call->flags &= ~RX_CALL_FAST_RECOVER;