[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231013121029.353351-1-jiri@resnulli.us>
Date: Fri, 13 Oct 2023 14:10:22 +0200
From: Jiri Pirko <jiri@...nulli.us>
To: netdev@...r.kernel.org
Cc: kuba@...nel.org,
pabeni@...hat.com,
davem@...emloft.net,
edumazet@...gle.com
Subject: [patch net-next v3 0/7] devlink: fix a deadlock when taking devlink instance lock while holding RTNL lock
From: Jiri Pirko <jiri@...dia.com>
devlink_port_fill() may be called sometimes with RTNL lock held.
When putting the nested port function devlink instance attrs,
current code takes nested devlink instance lock. In that case lock
ordering is wrong.
Patch #1 is a dependency of patch #2.
Patch #2 converts the peernet2id_alloc() call to rely in RCU so it could
called without devlink instance lock.
Patch #3 takes device reference for devlink instance making sure that
device does not disappear before devlink_release() is called.
Patch #4 benefits from the preparations done in patches #2 and #3 and
removes the problematic nested devlink lock aquisition.
Patched #5-#7 improve documentation to reflect this issue so it is
avoided in the future.
Jiri Pirko (7):
net: treat possible_net_t net pointer as an RCU one and add
read_pnet_rcu()
devlink: call peernet2id_alloc() with net pointer under RCU read lock
devlink: take device reference for devlink object
devlink: don't take instance lock for nested handle put
Documentation: devlink: add nested instance section
Documentation: devlink: add a note about RTNL lock into locking
section
devlink: document devlink_rel_nested_in_notify() function
Documentation/networking/devlink/index.rst | 28 ++++++++++++++++++
include/net/net_namespace.h | 15 ++++++++--
net/devlink/core.c | 34 ++++++++++++----------
net/devlink/netlink.c | 12 ++++++--
4 files changed, 68 insertions(+), 21 deletions(-)
--
2.41.0
Powered by blists - more mailing lists