rxrpc: Switch to Congestion Avoidance mode at cwnd==ssthresh
authorDavid Howells <dhowells@redhat.com>
Fri, 30 Sep 2016 08:26:12 +0000 (09:26 +0100)
committerDavid Howells <dhowells@redhat.com>
Fri, 30 Sep 2016 13:38:56 +0000 (14:38 +0100)
Switch to Congestion Avoidance mode at cwnd == ssthresh rather than relying
on cwnd getting incremented beyond ssthresh and the window size, the mode
being shifted and then cwnd being corrected.

We need to make sure we switch into CA mode so that we stop marking every
packet for ACK.

Signed-off-by: David Howells <dhowells@redhat.com>
net/rxrpc/input.c

index 1461d30583c9bf5eaa938aa934323dc8db854bf4..21746f0f7ae0ca8df8e9f3b78d99b286431d2ac7 100644 (file)
@@ -57,7 +57,7 @@ static void rxrpc_congestion_management(struct rxrpc_call *call,
                call->cong_ssthresh = max_t(unsigned int,
                                            summary->flight_size / 2, 2);
                cwnd = 1;
-               if (cwnd > call->cong_ssthresh &&
+               if (cwnd >= call->cong_ssthresh &&
                    call->cong_mode == RXRPC_CALL_SLOW_START) {
                        call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE;
                        call->cong_tstamp = skb->tstamp;
@@ -82,7 +82,7 @@ static void rxrpc_congestion_management(struct rxrpc_call *call,
                        goto packet_loss_detected;
                if (summary->cumulative_acks > 0)
                        cwnd += 1;
-               if (cwnd > call->cong_ssthresh) {
+               if (cwnd >= call->cong_ssthresh) {
                        call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE;
                        call->cong_tstamp = skb->tstamp;
                }
@@ -161,7 +161,7 @@ resume_normality:
        call->cong_dup_acks = 0;
        call->cong_extra = 0;
        call->cong_tstamp = skb->tstamp;
-       if (cwnd <= call->cong_ssthresh)
+       if (cwnd < call->cong_ssthresh)
                call->cong_mode = RXRPC_CALL_SLOW_START;
        else
                call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE;