Files
linux/net/ipv4
Christoph Paasch b0ac6d3b56 net: When removing nexthops, don't call synchronize_net if it is not necessary
When removing a nexthop, commit
90f33bffa3 ("nexthops: don't modify published nexthop groups") added a
call to synchronize_rcu() (later changed to _net()) to make sure
everyone sees the new nexthop-group before the rtnl-lock is released.

When one wants to delete a large number of groups and nexthops, it is
fastest to first flush the groups (ip nexthop flush groups) and then
flush the nexthops themselves (ip -6 nexthop flush). As that way the
groups don't need to be rebalanced.

However, `ip -6 nexthop flush` will still take a long time if there is
a very large number of nexthops because of the call to
synchronize_net(). Now, if there are no more groups, there is no point
in calling synchronize_net(). So, let's skip that entirely by checking
if nh->grp_list is empty.

This gives us a nice speedup:

BEFORE:
=======

$ time sudo ip -6 nexthop flush
Dump was interrupted and may be inconsistent.
Flushed 2097152 nexthops

real	1m45.345s
user	0m0.001s
sys	0m0.005s

$ time sudo ip -6 nexthop flush
Dump was interrupted and may be inconsistent.
Flushed 4194304 nexthops

real	3m10.430s
user	0m0.002s
sys	0m0.004s

AFTER:
======

$ time sudo ip -6 nexthop flush
Dump was interrupted and may be inconsistent.
Flushed 2097152 nexthops

real	0m17.545s
user	0m0.003s
sys	0m0.003s

$ time sudo ip -6 nexthop flush
Dump was interrupted and may be inconsistent.
Flushed 4194304 nexthops

real	0m35.823s
user	0m0.002s
sys	0m0.004s

Signed-off-by: Christoph Paasch <cpaasch@openai.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://patch.msgid.link/20250816-nexthop_dump-v2-2-491da3462118@openai.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2025-08-19 17:50:33 -07:00
..
2025-04-11 18:58:10 -07:00
2025-03-17 13:56:38 +00:00
2024-09-09 17:21:47 -07:00
2025-06-23 17:04:03 -07:00
2025-06-23 17:04:03 -07:00
2025-07-08 13:28:27 +02:00
2025-04-11 18:58:10 -07:00
2024-01-04 10:23:10 -08:00
2025-06-23 17:04:03 -07:00
2025-07-14 18:41:42 -07:00
2025-06-23 17:04:03 -07:00
2025-03-17 13:54:11 +00:00
2025-03-17 13:56:38 +00:00
2025-06-27 15:34:19 -07:00
2022-12-20 03:13:45 +01:00
2025-06-27 15:34:19 -07:00
2025-07-21 17:48:32 -07:00