Subject: Re: [PATCH net-next v1] net: openvswitch: decouple flow_table from ovs_mutex

From: Jakub Kicinski <[email-masked]>
Date: Fri, 13 Mar 2026 12:35:35 -0700

On Fri, 13 Mar 2026 18:31:12 +0100 Adrian Moreno wrote:
> Currently the entire ovs module is write-protected using the global
> ovs_mutex. While this simple approach works fine for control-plane
> operations (such as vport configurations), requiring the global mutex
> for flow modifications can be problematic.

YNL selftest for ovs seems to trigger this:

[   88.995118][   T50] =============================
[   88.995287][   T50] WARNING: suspicious RCU usage
[   88.995448][   T50] 7.0.0-rc3-virtme #1 Not tainted
[   88.995630][   T50] -----------------------------
[   88.995788][   T50] net/openvswitch/datapath.c:2666 RCU-list traversed in non-reader section!!
[   88.996122][   T50] 
[   88.996122][   T50] other info that might help us debug this:
[   88.996122][   T50] 
[   88.996388][   T50] 
[   88.996388][   T50] rcu_scheduler_active = 2, debug_locks = 1
[   88.996640][   T50] 3 locks held by kworker/2:1/50:
[   88.996800][   T50]  #0: ff11000001139b48 ((wq_completion)events){+.+.}-{0:0}, at: process_one_work+0xcb4/0x1390
[   88.997092][   T50]  #1: ffa000000036fd10 ((work_completion)(&(&ovs_net->masks_rebalance)->work)){+.+.}-{0:0}, at: process_one_work+0xd16/0x1390
[   88.997420][   T50]  #2: ffffffffc08038e8 (ovs_mutex){+.+.}-{4:4}, at: ovs_dp_masks_rebalance+0x29/0x270 [openvswitch]
[   88.997707][   T50] 
[   88.997707][   T50] stack backtrace:
[   88.997898][   T50] CPU: 2 UID: 0 PID: 50 Comm: kworker/2:1 Not tainted 7.0.0-rc3-virtme #1 PREEMPT(full) 
[   88.997903][   T50] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
[   88.997904][   T50] Workqueue: events ovs_dp_masks_rebalance [openvswitch]
[   88.997911][   T50] Call Trace:
[   88.997914][   T50]  <TASK>
[   88.997916][   T50]  dump_stack_lvl+0x6f/0xa0
[   88.997921][   T50]  lockdep_rcu_suspicious.cold+0x4f/0xad
[   88.997928][   T50]  ovs_dp_masks_rebalance+0x226/0x270 [openvswitch]
[   88.997933][   T50]  process_one_work+0xd57/0x1390
[   88.997940][   T50]  ? pwq_dec_nr_in_flight+0x700/0x700
[   88.997942][   T50]  ? lock_acquire.part.0+0xbc/0x260
[   88.997950][   T50]  worker_thread+0x4d6/0xd40
[   88.997954][   T50]  ? rescuer_thread+0x1330/0x1330
[   88.997956][   T50]  ? __kthread_parkme+0xb3/0x200
[   88.997960][   T50]  ? rescuer_thread+0x1330/0x1330
[   88.997962][   T50]  kthread+0x30f/0x3f0
[   88.997964][   T50]  ? trace_irq_enable.constprop.0+0x13c/0x190
[   88.997967][   T50]  ? kthread_affine_node+0x150/0x150
[   88.997970][   T50]  ret_from_fork+0x472/0x6b0
[   88.997974][   T50]  ? arch_exit_to_user_mode_prepare.isra.0+0x140/0x140
[   88.997977][   T50]  ? __switch_to+0x538/0xcf0
[   88.997980][   T50]  ? kthread_affine_node+0x150/0x150
[   88.997983][   T50]  ret_from_fork_asm+0x11/0x20
[   88.997991][   T50]  </TASK>

https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/tree/tools/net/ynl/tests/ovs.c