tcp: tcp_sack_new_ofo_skb() should be more conservative
authorEric Dumazet <edumazet@google.com>
Thu, 30 Apr 2020 17:35:42 +0000 (10:35 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 30 Apr 2020 20:24:01 +0000 (13:24 -0700)
commitccd0628fca440268711560a1dbacc727b4f9e214
tree83a814f124b01ec4c0c343d97c2ceb1e46854733
parent2b195850128f5bafde177b12489d9fa27962cc1e
tcp: tcp_sack_new_ofo_skb() should be more conservative

Currently, tcp_sack_new_ofo_skb() sends an ack if prior
acks were 'compressed', if room has to be made in tp->selective_acks[]

But there is no guarantee all four sack ranges can be included
in SACK option. As a matter of fact, when TCP timestamps option
is used, only three SACK ranges can be included.

Lets assume only two ranges can be included, and force the ack:

- When we touch more than 2 ranges in the reordering
  done if tcp_sack_extend() could be done.

- If we have at least 2 ranges when adding a new one.

This enforces that before a range is in third or fourth
position, at least one ACK packet included it in first/second
position.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c