tcp: fix stretch ACK bugs in Veno

Change Veno to properly handle stretch ACKs in additive
increase mode by passing in the count of ACKed packets
to tcp_cong_avoid_ai().

Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Pengcheng Yang 2020-03-16 14:35:10 +08:00 committed by David S. Miller
parent d861b5c753
commit ca04f5d4bb

View File

@ -154,8 +154,9 @@ static void tcp_veno_cong_avoid(struct sock *sk, u32 ack, u32 acked)
if (tcp_in_slow_start(tp)) {
/* Slow start. */
tcp_slow_start(tp, acked);
goto done;
acked = tcp_slow_start(tp, acked);
if (!acked)
goto done;
}
/* Congestion avoidance. */
@ -163,7 +164,7 @@ static void tcp_veno_cong_avoid(struct sock *sk, u32 ack, u32 acked)
/* In the "non-congestive state", increase cwnd
* every rtt.
*/
tcp_cong_avoid_ai(tp, tp->snd_cwnd, 1);
tcp_cong_avoid_ai(tp, tp->snd_cwnd, acked);
} else {
/* In the "congestive state", increase cwnd
* every other rtt.
@ -177,7 +178,7 @@ static void tcp_veno_cong_avoid(struct sock *sk, u32 ack, u32 acked)
veno->inc = 1;
tp->snd_cwnd_cnt = 0;
} else
tp->snd_cwnd_cnt++;
tp->snd_cwnd_cnt += acked;
}
done:
if (tp->snd_cwnd < 2)