On Thu, Nov 03, 2022 at 04:50:33PM -0700, Kuniyuki Iwashima wrote: > commit 11052589cf5c0bab3b4884d423d5f60c38fcf25d upstream > > Commit e21145a9871a ("ipv4: namespacify ip_early_demux sysctl knob") made > it possible to enable/disable early_demux on a per-netns basis. Then, we > introduced two knobs, tcp_early_demux and udp_early_demux, to switch it for > TCP/UDP in commit dddb64bcb346 ("net: Add sysctl to toggle early demux for > tcp and udp"). However, the .proc_handler() was wrong and actually > disabled us from changing the behaviour in each netns. > > We can execute early_demux if net.ipv4.ip_early_demux is on and each proto > .early_demux() handler is not NULL. When we toggle (tcp|udp)_early_demux, > the change itself is saved in each netns variable, but the .early_demux() > handler is a global variable, so the handler is switched based on the > init_net's sysctl variable. Thus, netns (tcp|udp)_early_demux knobs have > nothing to do with the logic. Whether we CAN execute proto .early_demux() > is always decided by init_net's sysctl knob, and whether we DO it or not is > by each netns ip_early_demux knob. > > This patch namespacifies (tcp|udp)_early_demux again. For now, the users > of the .early_demux() handler are TCP and UDP only, and they are called > directly to avoid retpoline. So, we can remove the .early_demux() handler > from inet6?_protos and need not dereference them in ip6?_rcv_finish_core(). > If another proto needs .early_demux(), we can restore it at that time. > > Fixes: dddb64bcb346 ("net: Add sysctl to toggle early demux for tcp and udp") > Signed-off-by: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx> > Link: https://lore.kernel.org/r/20220713175207.7727-1-kuniyu@xxxxxxxxxx > Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx> All now queued up, thanks. greg k-h