tcp: make congestion control more robust against reordering
authorYuchung Cheng <ycheng@google.com>
Tue, 2 Feb 2016 18:33:08 +0000 (10:33 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 7 Feb 2016 19:09:51 +0000 (14:09 -0500)
This change enables congestion control to update cwnd based on
not only packet cumulatively acked but also packets delivered
out-of-order. This makes congestion control robust against packet
reordering because it may raise cwnd as long as packets are being
delivered once reordering has been detected (i.e., it only cares
the amount of packets delivered, not the ordering among them).

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Eric Dumazet <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c

index 40824b380ef898ccc4454151e325bc700b6920c8..d598ff408cb94abe27ba9ec4623292fece1ea6f6 100644 (file)
@@ -3660,7 +3660,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
                tcp_cwnd_reduction(sk, acked_sacked, flag);
        } else if (tcp_may_raise_cwnd(sk, flag)) {
                /* Advance cwnd if state allows */
-               tcp_cong_avoid(sk, ack, acked);
+               tcp_cong_avoid(sk, ack, acked_sacked);
        }
 
        if ((flag & FLAG_FORWARD_PROGRESS) || !(flag & FLAG_NOT_DUP)) {