ipv4/tcp: do not use per netns ctl sockets
authorEric Dumazet <edumazet@google.com>
Mon, 24 Jan 2022 20:24:57 +0000 (12:24 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 29 Jul 2022 15:25:11 +0000 (17:25 +0200)
commitf52af853be7ac96ba8ced03c9136297fe5843b0b
tree6d978cc4ae09c76e3a0e718454b736713edf4357
parentda3c256e2d0ebc87c7db0c605c9692b6f1722074
ipv4/tcp: do not use per netns ctl sockets

[ Upstream commit 37ba017dcc3b1123206808979834655ddcf93251 ]

TCP ipv4 uses per-cpu/per-netns ctl sockets in order to send
RST and some ACK packets (on behalf of TIMEWAIT sockets).

This adds memory and cpu costs, which do not seem needed.
Now typical servers have 256 or more cores, this adds considerable
tax to netns users.

tcp sockets are used from BH context, are not receiving packets,
and do not store any persistent state but the 'struct net' pointer
in order to be able to use IPv4 output functions.

Note that I attempted a related change in the past, that had
to be hot-fixed in commit bdbbb8527b6f ("ipv4: tcp: get rid of ugly unicast_sock")

This patch could very well surface old bugs, on layers not
taking care of sk->sk_kern_sock properly.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/net/netns/ipv4.h
net/ipv4/tcp_ipv4.c