android_kernel_motorola_sm6375/net/ipv4
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Christoph Paasch e3efebfee6 net: When removing nexthops, don't call synchronize_net if it is not necessary
[ Upstream commit b0ac6d3b56a2384db151696cfda2836a8a961b6d ]

When removing a nexthop, commit
90f33bffa382 ("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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-12-03 12:45:10 +01:00
..
bpfilter
netfilter netfilter: Replace zero-length array with flexible-array member 2025-01-09 13:23:35 +01:00
af_inet.c net: inet: do not leave a dangling sk pointer in inet_create() 2024-12-14 19:44:51 +01:00
ah4.c
arp.c arp: use RCU protection in arp_xmit() 2025-03-13 12:43:18 +01:00
cipso_ipv4.c cipso: fix total option length computation 2024-07-05 09:08:22 +02:00
datagram.c
devinet.c ipv4: Fix NULL vs error pointer check in inet_blackhole_dev_init() 2025-09-09 18:43:58 +02:00
esp4.c net: ipv4: fix return value check in esp_remove_trailer 2023-10-25 11:53:21 +02:00
esp4_offload.c xfrm: Linearize the skb after offloading if needed. 2023-06-28 10:18:38 +02:00
fib_frontend.c ipv4: Mask upper DSCP bits and ECN bits in NETLINK_FIB_LOOKUP family 2024-11-08 16:20:37 +01:00
fib_lookup.h
fib_notifier.c
fib_rules.c ip: fib_rules: Fetch net from fib_rule in fib[46]_rule_configure(). 2025-06-04 14:32:34 +02:00
fib_semantics.c ipv4: fib: annotate races around nh->nh_saddr_genid and nh->nh_saddr 2023-10-25 11:53:21 +02:00
fib_trie.c ipv4: annotate data-races around fi->fib_dead 2023-09-23 10:59:58 +02:00
fou.c
gre_demux.c
gre_offload.c
icmp.c icmp: fix icmp_ndo_send address translation for reply direction 2025-09-09 18:43:57 +02:00
igmp.c ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet 2023-12-08 08:44:27 +01:00
inet_connection_sock.c tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink(). 2025-05-02 07:39:22 +02:00
inet_diag.c inet_diag: Initialize pad field in struct inet_diag_req_v2 2024-07-18 11:40:50 +02:00
inet_fragment.c inet: inet_defrag: prevent sk release while still in use 2024-11-08 16:20:26 +01:00
inet_hashtables.c net: set SOCK_RCU_FREE before inserting socket into hashtable 2024-09-12 11:03:50 +02:00
inet_timewait_sock.c tcp: Fix NEW_SYN_RECV handling in inet_twsk_purge() 2024-05-02 16:18:37 +02:00
inetpeer.c
ip_forward.c
ip_fragment.c inet: inet_defrag: prevent sk release while still in use 2024-11-08 16:20:26 +01:00
ip_gre.c ipv4: ip_gre: Fix drops of small packets in ipgre_xmit 2024-11-08 16:20:36 +01:00
ip_input.c
ip_options.c
ip_output.c net: ipv4: fix a memleak in ip_setup_cork 2024-02-23 08:25:05 +01:00
ip_sockglue.c ipv{4,6}/raw: fix output xfrm lookup wrt protocol 2023-06-05 08:17:33 +02:00
ip_tunnel.c net/ip6_tunnel: Prevent perpetual tunnel growth 2025-10-29 13:59:56 +01:00
ip_tunnel_core.c
ip_vti.c ip_vti: fix potential slab-use-after-free in decode_session6 2023-08-30 16:27:16 +02:00
ipcomp.c
ipconfig.c
ipip.c
ipmr.c ipmr: fix tables suspicious RCU usage 2024-12-14 19:44:34 +01:00
ipmr_base.c ipmr: do not call mr_mfc_uses_dev() for unres entries 2025-03-13 12:42:59 +01:00
Kconfig tcp: configurable source port perturb table size 2022-12-08 11:23:00 +01:00
Makefile
metrics.c ipv4: prevent potential spectre v1 gadget in ip_metrics_convert() 2023-02-06 07:52:45 +01:00
netfilter.c
netlink.c
nexthop.c net: When removing nexthops, don't call synchronize_net if it is not necessary 2025-12-03 12:45:10 +01:00
ping.c
proc.c
protocol.c
raw.c ipv{4,6}/raw: fix output xfrm lookup wrt protocol 2023-06-05 08:17:33 +02:00
raw_diag.c
route.c net: ipv4: fix regression in local-broadcast routes 2025-09-04 14:05:54 +02:00
syncookies.c tcp: fix cookie_init_timestamp() overflows 2023-11-20 10:30:10 +01:00
sysctl_net_ipv4.c
tcp.c tcp: fix __tcp_close() to only send RST when required 2025-10-29 13:59:47 +01:00
tcp_bbr.c
tcp_bic.c
tcp_bpf.c tcp_bpf: Call sk_msg_free() when tcp_bpf_send_verdict() fails to allocate psock->cork. 2025-10-02 13:34:27 +02:00
tcp_cdg.c
tcp_cong.c
tcp_cubic.c
tcp_dctcp.c tcp: Fix shift-out-of-bounds in dctcp_update_alpha(). 2024-06-16 13:28:45 +02:00
tcp_dctcp.h
tcp_diag.c net: annotate lockless accesses to sk->sk_max_ack_backlog 2024-11-08 16:20:46 +01:00
tcp_fastopen.c tcp: add TCP_INFO status for failed client TFO 2024-07-18 11:40:53 +02:00
tcp_highspeed.c
tcp_htcp.c
tcp_hybla.c
tcp_illinois.c
tcp_input.c tcp: Don't call reqsk_fastopen_remove() in tcp_conn_request(). 2025-10-29 13:59:51 +01:00
tcp_ipv4.c net: annotate lockless accesses to sk->sk_ack_backlog 2024-11-08 16:20:46 +01:00
tcp_lp.c
tcp_metrics.c tcp_metrics: validate source addr length 2024-07-18 11:40:50 +02:00
tcp_minisocks.c tcp: tcp_check_req() can be called from process context 2023-03-11 16:44:12 +01:00
tcp_nv.c
tcp_offload.c net-timestamp: support TCP GSO case for a few missing flags 2025-03-13 12:43:30 +01:00
tcp_output.c tcp: fix tcp_tso_should_defer() vs large RTT 2025-10-29 13:59:57 +01:00
tcp_rate.c
tcp_recovery.c tcp: fix excessive TLP and RACK timeouts from HZ rounding 2023-10-25 11:53:21 +02:00
tcp_scalable.c
tcp_timer.c tcp: avoid too many retransmit packets 2024-07-18 11:40:56 +02:00
tcp_ulp.c
tcp_vegas.c
tcp_vegas.h
tcp_veno.c
tcp_westwood.c
tcp_yeah.c
tunnel4.c
udp.c udp: Fix memory accounting leak. 2025-10-29 13:59:45 +01:00
udp_diag.c
udp_impl.h
udp_offload.c udp: also consider secpath when evaluating ipsec use for checksumming 2025-08-28 16:21:24 +02:00
udp_tunnel.c net/tunnel: wait until all sk_user_data reader finish before releasing the sock 2023-01-18 11:41:14 +01:00
udplite.c udplite: Fix NULL pointer dereference in __sk_mem_raise_allocated(). 2023-05-30 12:44:09 +01:00
xfrm4_input.c xfrm: Preserve vlan tags for transport mode software GRO 2024-05-17 11:43:53 +02:00
xfrm4_output.c
xfrm4_policy.c
xfrm4_protocol.c
xfrm4_state.c
xfrm4_tunnel.c