aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2016-09-30 04:26:12 -0400
committerDavid Howells <dhowells@redhat.com>2016-09-30 09:38:56 -0400
commit8782def204e57f6a507ff425e4944df4e010751a (patch)
treedbd79030746db67acb2754892e4a5130dc630702 /net
parent265a44bbf23e4ed1c76409f07595ea88351ba4b3 (diff)
rxrpc: Switch to Congestion Avoidance mode at cwnd==ssthresh
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>
Diffstat (limited to 'net')
-rw-r--r--net/rxrpc/input.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
index 1461d30583c9..21746f0f7ae0 100644
--- a/net/rxrpc/input.c
+++ b/net/rxrpc/input.c
@@ -57,7 +57,7 @@ static void rxrpc_congestion_management(struct rxrpc_call *call,
57 call->cong_ssthresh = max_t(unsigned int, 57 call->cong_ssthresh = max_t(unsigned int,
58 summary->flight_size / 2, 2); 58 summary->flight_size / 2, 2);
59 cwnd = 1; 59 cwnd = 1;
60 if (cwnd > call->cong_ssthresh && 60 if (cwnd >= call->cong_ssthresh &&
61 call->cong_mode == RXRPC_CALL_SLOW_START) { 61 call->cong_mode == RXRPC_CALL_SLOW_START) {
62 call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE; 62 call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE;
63 call->cong_tstamp = skb->tstamp; 63 call->cong_tstamp = skb->tstamp;
@@ -82,7 +82,7 @@ static void rxrpc_congestion_management(struct rxrpc_call *call,
82 goto packet_loss_detected; 82 goto packet_loss_detected;
83 if (summary->cumulative_acks > 0) 83 if (summary->cumulative_acks > 0)
84 cwnd += 1; 84 cwnd += 1;
85 if (cwnd > call->cong_ssthresh) { 85 if (cwnd >= call->cong_ssthresh) {
86 call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE; 86 call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE;
87 call->cong_tstamp = skb->tstamp; 87 call->cong_tstamp = skb->tstamp;
88 } 88 }
@@ -161,7 +161,7 @@ resume_normality:
161 call->cong_dup_acks = 0; 161 call->cong_dup_acks = 0;
162 call->cong_extra = 0; 162 call->cong_extra = 0;
163 call->cong_tstamp = skb->tstamp; 163 call->cong_tstamp = skb->tstamp;
164 if (cwnd <= call->cong_ssthresh) 164 if (cwnd < call->cong_ssthresh)
165 call->cong_mode = RXRPC_CALL_SLOW_START; 165 call->cong_mode = RXRPC_CALL_SLOW_START;
166 else 166 else
167 call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE; 167 call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE;