[PATCH v3 net-next 00/15] ip6mr: No RTNL for RTNL_FAMILY_IP6MR rtnetlink.

Kuniyuki Iwashima
2026-04-07T21:20:04Z

This series is the IPv6 version of

https://lore.kernel.org/netdev/20260228221800.1082070-1-kuniyu@google.com/

and removes RTNL from ip6mr rtnetlink handlers.

After this series, there are a few RTNL left in net/ipv6/ipmr.c
and such users will be converted to per-netns RTNL in another
series.

Patch 1 extends the ipmr selftest to exercise most of the RTNL
paths in net/ipv6/ipmr.c

Patch 2 is misc cleanup.

Patch 3 - 7 converts RTM_GETROUTE handlers to RCU.

Patch 8 removes struct fib_dump_filter.rtnl_held.

Patch 9 - 11 converts ->exit_batch() to ->exit_rtnl() to
save one RTNL in cleanup_net().

Patch 12 - 13 removes unnecessary RTNL during setup_net()
failure.

Patch 14 is cleanup.

Patch 15 drops RTNL for MRT6_(ADD|DEL)_MFC(_PROXY)?.

Kuniyuki Iwashima (15):
selftest: net: Extend ipmr.c for IP6MR.
ipmr: Convert mr_table.cache_resolve_queue_len to u32.
ip6mr: Annotate access to mrt->mroute_do_{pim,assert,wrvifwhole}.
ip6mr: Use MAXMIFS in mr6_msgsize().
ip6mr: Allocate skb earlier in ip6mr_rtm_getroute().
ip6mr: Convert ip6mr_rtm_getroute() to RCU.
ip6mr: Convert ip6mr_rtm_dumproute() to RCU.
net: Remove rtnl_held of struct fib_dump_filter.
ip6mr: Move unregister_netdevice_many() out of mroute_clean_tables().
ip6mr: Move unregister_netdevice_many() out of ip6mr_free_table().
ip6mr: Convert ip6mr_net_exit_batch() to ->exit_rtnl().
ip6mr: Remove RTNL in ip6mr_rules_init() and ip6mr_net_init().
ip6mr: Call fib_rules_unregister() without RTNL.
ip6mr: Define net->ipv6.{ip6mr_notifier_ops,ipmr_seq} under
CONFIG_IP_MROUTE.
ip6mr: Replace RTNL with a dedicated mutex for MFC.

include/linux/mroute_base.h | 2 +-
include/net/ip_fib.h | 1 -
include/net/netns/ipv6.h | 5 +-
net/ipv4/fib_frontend.c | 19 +-
net/ipv4/ipmr.c | 22 +-
net/ipv6/ip6_fib.c | 1 -
net/ipv6/ip6mr.c | 195 +++++++++++-------
net/mpls/af_mpls.c | 6 +-
tools/testing/selftests/net/forwarding/ipmr.c | 163 ++++++++++-----
9 files changed, 252 insertions(+), 162 deletions(-)

--
2.53.0.1213.gd9a14994de-goog