Commit ca04f5d4 authored by Pengcheng Yang's avatar Pengcheng Yang Committed by David S. Miller
Browse files

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: default avatarPengcheng Yang <yangpc@wangsu.com>
Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d861b5c7
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -154,7 +154,8 @@ 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);
			acked = tcp_slow_start(tp, acked);
			if (!acked)
				goto done;
		}

@@ -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)