diff options
author | 2025-04-17 17:03:48 -0700 | |
---|---|---|
committer | 2025-04-24 09:29:56 +0200 | |
commit | 5720a328c3e9802af48dd216c1c7eb0e91b61b6c (patch) | |
tree | 149643f66df8fbf8310c6b4be47cbad4311a5c3b /tools/perf/scripts/python/export-to-postgresql.py | |
parent | ipv6: Split ip6_route_info_create(). (diff) | |
download | wireguard-linux-5720a328c3e9802af48dd216c1c7eb0e91b61b6c.tar.xz wireguard-linux-5720a328c3e9802af48dd216c1c7eb0e91b61b6c.zip |
ipv6: Preallocate rt->fib6_nh->rt6i_pcpu in ip6_route_info_create().
ip6_route_info_create_nh() will be called under RCU.
Then, fib6_nh_init() is also under RCU, but per-cpu memory allocation
is very likely to fail with GFP_ATOMIC while bulk-adding IPv6 routes
and we would see a bunch of this message in dmesg.
percpu: allocation failed, size=8 align=8 atomic=1, atomic alloc failed, no space left
percpu: allocation failed, size=8 align=8 atomic=1, atomic alloc failed, no space left
Let's preallocate rt->fib6_nh->rt6i_pcpu in ip6_route_info_create().
If something fails before the original memory allocation in
fib6_nh_init(), ip6_route_info_create_nh() calls fib6_info_release(),
which releases the preallocated per-cpu memory.
Note that rt->fib6_nh->rt6i_pcpu is not preallocated when called via
ipv6_stub, so we still need alloc_percpu_gfp() in fib6_nh_init().
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250418000443.43734-8-kuniyu@amazon.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'tools/perf/scripts/python/export-to-postgresql.py')
0 files changed, 0 insertions, 0 deletions