[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260119142120.28170-1-leon.hwang@linux.dev>
Date: Mon, 19 Jan 2026 22:21:17 +0800
From: Leon Hwang <leon.hwang@...ux.dev>
To: bpf@...r.kernel.org
Cc: Martin KaFai Lau <martin.lau@...ux.dev>,
Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
Andrii Nakryiko <andrii@...nel.org>,
Eduard Zingerman <eddyz87@...il.com>,
Song Liu <song@...nel.org>,
Yonghong Song <yonghong.song@...ux.dev>,
John Fastabend <john.fastabend@...il.com>,
KP Singh <kpsingh@...nel.org>,
Stanislav Fomichev <sdf@...ichev.me>,
Hao Luo <haoluo@...gle.com>,
Jiri Olsa <jolsa@...nel.org>,
Shuah Khan <shuah@...nel.org>,
Leon Hwang <leon.hwang@...ux.dev>,
linux-kernel@...r.kernel.org,
linux-kselftest@...r.kernel.org,
kernel-patches-bot@...com
Subject: [PATCH bpf-next 0/3] bpf: Avoid deadlock using trylock when popping LRU free nodes
Switch the free-node pop paths to raw_spin_trylock*() so callers don't block
on contended LRU locks. This is a narrower change than Menglong's approach [1],
which aimed to eliminate the deadlock entirely.
The trylock-based approach avoids deadlocks in long-lived critical
sections, while still allowing locking in short-lived ones. Although it
does not completely eliminate the possibility of deadlock, it
significantly reduces the likelihood in practice.
LRU-related deadlocks have been observed multiple times, including:
- [syzbot] [bpf?] possible deadlock in bpf_lru_push_free (2) [2]
- Re: [PATCH bpf v3 0/4] bpf: Free special fields when update hash and local storage maps [3]
- Raw log of CI failure [4]
BTW, this series also factors out the bpf_lru_node_set_hash() helper, along with
a comment describing the required ordering and locking constraints.
Links:
[1] https://lore.kernel.org/bpf/20251030030010.95352-1-dongml2@chinatelecom.cn/
[2] https://lore.kernel.org/bpf/69155df5.a70a0220.3124cb.0018.GAE@google.com/
[3] https://lore.kernel.org/bpf/CAEf4BzbTJCUx0D=zjx6+5m5iiGhwLzaP94hnw36ZMDHAf4-U_w@mail.gmail.com/
[4] https://github.com/kernel-patches/bpf/actions/runs/20943173932/job/60181505085
Leon Hwang (3):
bpf: Factor out bpf_lru_node_set_hash() helper
bpf: Avoid deadlock using trylock when popping LRU free nodes
selftests/bpf: Allow -ENOMEM on LRU map updates
kernel/bpf/bpf_lru_list.c | 35 ++++++++++++++-----
.../bpf/map_tests/map_percpu_stats.c | 3 +-
2 files changed, 28 insertions(+), 10 deletions(-)
--
2.52.0
Powered by blists - more mailing lists