Yuchung Cheng c84a57113f tcp: fix bogus RTT on special retransmission
RTT may be bogus with tall loss probe (TLP) when a packet
is retransmitted and latter (s)acked without TCPCB_SACKED_RETRANS flag.

For example, TLP calls __tcp_retransmit_skb() instead of
tcp_retransmit_skb(). The skb timestamps are updated but the sacked
flag is not marked with TCPCB_SACKED_RETRANS. As a result we'll
get bogus RTT in tcp_clean_rtx_queue() or in tcp_sacktag_one() on
spurious retransmission.

The fix is to apply the sticky flag TCP_EVER_RETRANS to enforce Karn's
check on RTT sampling. However this will disable F-RTO if timeout occurs
after TLP, by resetting undo_marker in tcp_enter_loss(). We relax this
check to only if any pending retransmists are still in-flight.

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Acked-by: Nandita Dukkipati <nanditad@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-03-03 15:33:02 -05:00
..
2013-12-06 07:24:39 +01:00
2013-12-29 16:34:25 -05:00
2013-10-08 23:19:24 -04:00
2013-12-28 17:03:20 -05:00
2014-01-18 23:08:02 -08:00
2014-01-18 23:08:02 -08:00
2013-09-03 21:41:43 -04:00
2014-01-02 03:30:36 -05:00
2014-02-17 16:54:42 -05:00
2013-03-21 11:47:50 -04:00
2012-03-11 23:42:51 -07:00
2013-05-31 17:19:05 -07:00