|
@@ -176,6 +176,18 @@ static int tcp_write_timeout(struct sock *sk)
|
|
|
syn_set = true;
|
|
|
} else {
|
|
|
if (retransmits_timed_out(sk, sysctl_tcp_retries1, 0, 0)) {
|
|
|
+ /* Some middle-boxes may black-hole Fast Open _after_
|
|
|
+ * the handshake. Therefore we conservatively disable
|
|
|
+ * Fast Open on this path on recurring timeouts with
|
|
|
+ * few or zero bytes acked after Fast Open.
|
|
|
+ */
|
|
|
+ if (tp->syn_data_acked &&
|
|
|
+ tp->bytes_acked <= tp->rx_opt.mss_clamp) {
|
|
|
+ tcp_fastopen_cache_set(sk, 0, NULL, true, 0);
|
|
|
+ if (icsk->icsk_retransmits == sysctl_tcp_retries1)
|
|
|
+ NET_INC_STATS_BH(sock_net(sk),
|
|
|
+ LINUX_MIB_TCPFASTOPENACTIVEFAIL);
|
|
|
+ }
|
|
|
/* Black hole detection */
|
|
|
tcp_mtu_probing(icsk, sk);
|
|
|
|