tcp: Change txhash on every SYN and RTO retransmit
The current code changes txhash (flowlables) on every retransmitted SYN/ACK, but only after the 2nd retransmitted SYN and only after tcp_retries1 RTO retransmits. With this patch: 1) txhash is changed with every SYN retransmits 2) txhash is changed with every RTO. The result is that we can start re-routing around failed (or very congested paths) as soon as possible. Otherwise application health checks may fail and the connection may be terminated before we start to change txhash. v4: Removed sysctl, txhash is changed for all RTOs v3: Removed text saying default value of sysctl is 0 (it is 100) v2: Added sysctl documentation and cleaned code Tested with packetdrill tests Signed-off-by: Lawrence Brakmo <brakmo@fb.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fa5effe766
commit
3acf3ec3f4
|
@ -192,6 +192,8 @@ static int tcp_write_timeout(struct sock *sk)
|
|||
if (tp->syn_data && icsk->icsk_retransmits == 1)
|
||||
NET_INC_STATS(sock_net(sk),
|
||||
LINUX_MIB_TCPFASTOPENACTIVEFAIL);
|
||||
} else if (!tp->syn_data && !tp->syn_fastopen) {
|
||||
sk_rethink_txhash(sk);
|
||||
}
|
||||
retry_until = icsk->icsk_syn_retries ? : net->ipv4.sysctl_tcp_syn_retries;
|
||||
syn_set = true;
|
||||
|
@ -213,6 +215,8 @@ static int tcp_write_timeout(struct sock *sk)
|
|||
tcp_mtu_probing(icsk, sk);
|
||||
|
||||
dst_negative_advice(sk);
|
||||
} else {
|
||||
sk_rethink_txhash(sk);
|
||||
}
|
||||
|
||||
retry_until = net->ipv4.sysctl_tcp_retries2;
|
||||
|
|
Loading…
Reference in New Issue