Re: [PATCH net v3 4/7] net/sched: act_gate: read schedule via RCU
From: Victor Nogueira <hidden>
Date: 2026-01-21 19:44:34
Also in:
lkml, stable
On 21/01/2026 10:20, Paul Moses wrote:
quoted hunk ↗ jump to hunk
Switch dump/accessor reads to RCU read-side sections. This matches other actions that read params under rcu_read_lock(), e.g. act_tunnel_key dump (commit e97ae742972f6c), act_ctinfo dump (commit 799c94178cf9c9), and act_skbedit dump (commit 1f376373bd225c). Dump reads tcf_action via READ_ONCE, following the lockless action reads used in act_sample (commit 5c5670fae43027) and act_gact. Timer logic stays under tcf_lock and uses rcu_dereference_protected(), keeping RCU readers cheap while preserving lock-serialized timer updates.diff --git a/include/net/tc_act/tc_gate.h b/include/net/tc_act/tc_gate.h index 05968b3822392..9587d9e9fa38f 100644 --- a/include/net/tc_act/tc_gate.h +++ b/include/net/tc_act/tc_gate.h@@ -57,9 +57,10 @@ static inline s32 tcf_gate_prio(const struct tc_action *a) s32 tcfg_prio; struct tcf_gate_params *p; - p = rcu_dereference_protected(to_gate(a)->param, - lockdep_rtnl_is_held()); + rcu_read_lock(); + p = rcu_dereference(to_gate(a)->param); tcfg_prio = p->tcfg_priority; + rcu_read_unlock();
These helper functions are called with the tcf_lock acquired, so you don't need rcu_read_lock here. You can just do: p = rcu_dereference_protected(to_gate(a)->param, lockdep_is_held(&gact->tcf_lock)); cheers, Victor