[PATCH mptcp-next 2/6] mptcp: don't reset dst when setting default 0 tos
Geliang Tang <[email protected]> Sat, 25 Jul 2026 21:13:39 +0800
| Newsgroups | dev.linux.lists.mptcp |
|---|---|
| Message-ID | <80a22df256550b7bbed7a7e06b8d8c6a6019fee0.1784985085.git.tanggeliang@kylinos.cn> |
From: Geliang Tang <[email protected]> __ip_sock_set_tos() is called unconditionally during setsockopt and on each sync_socket_options() pass, even when inet_sk(sk)->tos is 0 (the default). On SOCK_STREAM the helper masks out the ECN bits and writes sk_tos2prio(), which leaves priority=0 alone but still calls sk_dst_reset() unconditionally, forcing a route lookup on the next packet. Guard both call sites with 'if (val > 0)' so the default-0 case is a no-op. Signed-off-by: Geliang Tang <[email protected]> --- net/mptcp/sockopt.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index fcf6feb2a9eb..1b2487a5ae2f 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -762,7 +762,8 @@ static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname, bool slow; slow = lock_sock_fast(ssk); - __ip_sock_set_tos(ssk, val); + if (val > 0) + __ip_sock_set_tos(ssk, val); unlock_sock_fast(ssk, slow); } release_sock(sk); @@ -1562,7 +1563,8 @@ static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk) ssk->sk_bound_dev_if = sk->sk_bound_dev_if; ssk->sk_incoming_cpu = sk->sk_incoming_cpu; ssk->sk_ipv6only = sk->sk_ipv6only; - __ip_sock_set_tos(ssk, inet_sk(sk)->tos); + if (inet_sk(sk)->tos > 0) + __ip_sock_set_tos(ssk, inet_sk(sk)->tos); if (sk->sk_userlocks & tx_rx_locks) { ssk->sk_userlocks |= sk->sk_userlocks & tx_rx_locks; -- 2.53.0