Patch "tcp: revert F-RTO middle-box workaround" has been added to the 4.14-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
tcp: revert F-RTO middle-box workaround
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
tcp-revert-f-rto-middle-box-workaround.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Tue Mar 6 19:02:12 PST 2018
From: Yuchung Cheng <[email protected]>
Date: Tue, 27 Feb 2018 14:15:01 -0800
Subject: tcp: revert F-RTO middle-box workaround
From: Yuchung Cheng <[email protected]>
[ Upstream commit d4131f09770d9b7471c9da65e6ecd2477746ac5c ]
This reverts commit cc663f4d4c97b7297fb45135ab23cfd508b35a77. While fixing some broken middle-boxes that modifies receive window fields, it does not address middle-boxes that strip off SACK options. The best solution is to fully revert this patch and the root F-RTO enhancement.
--- net/ipv4/tcp_input.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-)
net/ipv4/tcp_input.c +7 -10
@@ -1947,7 +1947,6 @@ void tcp_enter_loss(struct sock *sk)struct tcp_sock *tp =tcp_sk (sk);struct net *net =sock_net (sk);struct sk_buff *skb; -bool new_recovery = icsk->icsk_ca_state < TCP_CA_Recovery;bool is_reneg;/* is receiver reneging on SACKs? */ bool mark_lost;
@@ -2010,17 +2009,15 @@ void tcp_enter_loss(struct sock *sk) tp->high_seq = tp->snd_nxt;tcp_ecn_queue_cwr (tp); -/* F-RTO RFC5682 sec 3.1 step 1: retransmit SND.UNA if no previous -* loss recovery is underway except recurring timeout(s) on -* the same SND.UNA (sec 3.2). Disable F-RTO on path MTU probing -* -* In theory F-RTO can be used repeatedly during loss recovery. -* In practice this interacts badly with broken middle-boxes that -* falsely raise the receive window, which results in repeated -* timeouts and stop-and-go behavior. +/* F-RTO RFC5682 sec 3.1 step 1 mandates to disable F-RTO +* if a previous recovery is underway, otherwise it may incorrectly +* call a timeout spurious if some previously retransmitted packets +* are s/acked (sec 3.2). We do not apply that retriction since +* retransmitted skbs are permanently tagged with TCPCB_EVER_RETRANS +* so FLAG_ORIG_SACK_ACKED is always correct. But we do disable F-RTO +* on PTMU discovery to avoid sending new data. */ tp->frto = sysctl_tcp_frto && - (new_recovery || icsk->icsk_retransmits) && !inet_csk (sk)->icsk_mtup.probe_size; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/tcp-purge-write-queue-upon-rst.patch queue-4.14/tcp-revert-f-rto-extension-to-detect-more-spurious-timeouts.patch queue-4.14/tcp-revert-f-rto-middle-box-workaround.patch