]> www.infradead.org Git - users/dwmw2/linux.git/commit
rtnetlink: Add per-netns RTNL.
authorKuniyuki Iwashima <kuniyu@amazon.com>
Fri, 4 Oct 2024 22:10:29 +0000 (15:10 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 8 Oct 2024 13:16:59 +0000 (15:16 +0200)
commit76aed95319da25d6884dff01d5f0149e4b542f96
treea4abd91a746cb82930cf34c1b588cb12e8613d4e
parentec763c234d7f60c5bce0fa2611ba79f5be1af76b
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>
include/linux/rtnetlink.h
include/net/net_namespace.h
net/Kconfig.debug
net/core/net_namespace.c
net/core/rtnetlink.c