netfilter: nf_dup{4, 6}: Move duplication check to task_struct
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Mon, 12 May 2025 10:28:44 +0000 (12:28 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 23 May 2025 11:57:12 +0000 (13:57 +0200)
commita1f1acb9c5db9b385c9b3eb1f27f897c06df49ae
treec84d694ad80f4fa33a898bf57f38cecaf1381fee
parent22a9613de4c29d7d0770bfb8a5a9d73eb8df7dad
netfilter: nf_dup{4, 6}: Move duplication check to task_struct

nf_skb_duplicated is a per-CPU variable and relies on disabled BH for its
locking. Without per-CPU locking in local_bh_disable() on PREEMPT_RT
this data structure requires explicit locking.

Due to the recursion involved, the simplest change is to make it a
per-task variable.

Move the per-CPU variable nf_skb_duplicated to task_struct and name it
in_nf_duplicate. Add it to the existing bitfield so it doesn't use
additional memory.

Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: Vincent Guittot <vincent.guittot@linaro.org>
Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ben Segall <bsegall@google.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Valentin Schneider <vschneid@redhat.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/linux/netfilter.h
include/linux/sched.h
net/ipv4/netfilter/ip_tables.c
net/ipv4/netfilter/nf_dup_ipv4.c
net/ipv6/netfilter/ip6_tables.c
net/ipv6/netfilter/nf_dup_ipv6.c
net/netfilter/core.c