Skip to content

Commit c22bdca

Browse files
nealcardwelldavem330
authored andcommitted
tcp: fix stretch ACK bugs in Reno
Change Reno to properly handle stretch ACKs in additive increase mode by passing in the count of ACKed packets to tcp_cong_avoid_ai(). In addition, if snd_cwnd crosses snd_ssthresh during slow start processing, and we then exit slow start mode, we need to carry over any remaining "credit" for packets ACKed and apply that to additive increase by passing this remaining "acked" count to tcp_cong_avoid_ai(). Reported-by: Eyal Perry <eyalpe@mellanox.com> Signed-off-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 814d488 commit c22bdca

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

net/ipv4/tcp_cong.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -335,11 +335,13 @@ void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 acked)
335335
return;
336336

337337
/* In "safe" area, increase. */
338-
if (tp->snd_cwnd <= tp->snd_ssthresh)
339-
tcp_slow_start(tp, acked);
338+
if (tp->snd_cwnd <= tp->snd_ssthresh) {
339+
acked = tcp_slow_start(tp, acked);
340+
if (!acked)
341+
return;
342+
}
340343
/* In dangerous area, increase slowly. */
341-
else
342-
tcp_cong_avoid_ai(tp, tp->snd_cwnd, 1);
344+
tcp_cong_avoid_ai(tp, tp->snd_cwnd, acked);
343345
}
344346
EXPORT_SYMBOL_GPL(tcp_reno_cong_avoid);
345347

0 commit comments

Comments
 (0)