mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-17 22:23:45 -04:00
rtnetlink: Add per-netns RTNL.
The goal is to break RTNL down into per-netns mutex. This patch adds per-netns mutex and its helper functions, rtnl_net_lock() and rtnl_net_unlock(). rtnl_net_lock() acquires the global RTNL and per-netns RTNL mutex, and rtnl_net_unlock() releases them. We will replace 800+ rtnl_lock() with rtnl_net_lock() and finally removes rtnl_lock() in rtnl_net_lock(). When we need to nest per-netns RTNL mutex, we will use __rtnl_net_lock(), and its locking order is defined by rtnl_net_lock_cmp_fn() as follows: 1. init_net is first 2. netns address ascending order Note that the conversion will be done under CONFIG_DEBUG_NET_SMALL_RTNL with LOCKDEP so that we can carefully add the extra mutex without slowing down RTNL operations during conversion. Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
ec763c234d
commit
76aed95319
@@ -24,3 +24,18 @@ config DEBUG_NET
|
||||
help
|
||||
Enable extra sanity checks in networking.
|
||||
This is mostly used by fuzzers, but is safe to select.
|
||||
|
||||
config DEBUG_NET_SMALL_RTNL
|
||||
bool "Add extra per-netns mutex inside RTNL"
|
||||
depends on DEBUG_KERNEL && NET && LOCK_DEBUGGING_SUPPORT
|
||||
select PROVE_LOCKING
|
||||
default n
|
||||
help
|
||||
rtnl_lock() is being replaced with rtnl_net_lock() that
|
||||
acquires the global RTNL and a small per-netns RTNL mutex.
|
||||
|
||||
During the conversion, rtnl_net_lock() just adds an extra
|
||||
mutex in every RTNL scope and slows down the operations.
|
||||
|
||||
Once the conversion completes, rtnl_lock() will be removed
|
||||
and rtnetlink will gain per-netns scalability.
|
||||
|
||||
Reference in New Issue
Block a user