tcp: Change SYN ACK retransmit behaviour to account for rehash
Disabling rehash behavior did not affect SYN ACK retransmits because hash was forcefully changed bypassing the sk_rethink_hash function. This patch adds a condition which checks for rehash mode before resetting hash. Signed-off-by: Akhmat Karakotov <hmukos@yandex-team.ru> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e7b9bfd184
commit
cb6cd2cec7
|
@ -1452,7 +1452,8 @@ set_sndbuf:
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sk->sk_txrehash = (u8)val;
|
/* Paired with READ_ONCE() in tcp_rtx_synack() */
|
||||||
|
WRITE_ONCE(sk->sk_txrehash, (u8)val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -4092,7 +4092,9 @@ int tcp_rtx_synack(const struct sock *sk, struct request_sock *req)
|
||||||
struct flowi fl;
|
struct flowi fl;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
tcp_rsk(req)->txhash = net_tx_rndhash();
|
/* Paired with WRITE_ONCE() in sock_setsockopt() */
|
||||||
|
if (READ_ONCE(sk->sk_txrehash) == SOCK_TXREHASH_ENABLED)
|
||||||
|
tcp_rsk(req)->txhash = net_tx_rndhash();
|
||||||
res = af_ops->send_synack(sk, NULL, &fl, req, NULL, TCP_SYNACK_NORMAL,
|
res = af_ops->send_synack(sk, NULL, &fl, req, NULL, TCP_SYNACK_NORMAL,
|
||||||
NULL);
|
NULL);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
|
|
Loading…
Reference in New Issue