| From foo@baz Mon Jan 21 08:59:26 CET 2019 |
| From: Yuchung Cheng <ycheng@google.com> |
| Date: Tue, 8 Jan 2019 18:14:28 -0800 |
| Subject: tcp: change txhash on SYN-data timeout |
| |
| From: Yuchung Cheng <ycheng@google.com> |
| |
| [ Upstream commit c5715b8fabfca0ef85903f8bad2189940ed41cc8 ] |
| |
| Previously upon SYN timeouts the sender recomputes the txhash to |
| try a different path. However this does not apply on the initial |
| timeout of SYN-data (active Fast Open). Therefore an active IPv6 |
| Fast Open connection may incur one second RTO penalty to take on |
| a new path after the second SYN retransmission uses a new flow label. |
| |
| This patch removes this undesirable behavior so Fast Open changes |
| the flow label just like the regular connections. This also helps |
| avoid falsely disabling Fast Open on the sender which triggers |
| after two consecutive SYN timeouts on Fast Open. |
| |
| Signed-off-by: Yuchung Cheng <ycheng@google.com> |
| Reviewed-by: Neal Cardwell <ncardwell@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv4/tcp_timer.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/ipv4/tcp_timer.c |
| +++ b/net/ipv4/tcp_timer.c |
| @@ -224,7 +224,7 @@ static int tcp_write_timeout(struct sock |
| if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) { |
| if (icsk->icsk_retransmits) { |
| dst_negative_advice(sk); |
| - } else if (!tp->syn_data && !tp->syn_fastopen) { |
| + } else { |
| sk_rethink_txhash(sk); |
| } |
| retry_until = icsk->icsk_syn_retries ? : net->ipv4.sysctl_tcp_syn_retries; |