Message ID | 20201202231332.3923644-1-sdf@google.com |
---|---|
State | Superseded |
Headers | show |
Series | [bpf-next] libbpf: cap retries in sys_bpf_prog_load | expand |
Hello: This patch was applied to bpf/bpf-next.git (refs/heads/master): On Wed, 2 Dec 2020 15:13:32 -0800 you wrote: > I've seen a situation, where a process that's under pprof constantly > generates SIGPROF which prevents program loading indefinitely. > The right thing to do probably is to disable signals in the upper > layers while loading, but it still would be nice to get some error from > libbpf instead of an endless loop. > > Let's add some small retry limit to the program loading: > try loading the program 5 (arbitrary) times and give up. > > [...] Here is the summary with links: - [bpf-next] libbpf: cap retries in sys_bpf_prog_load https://git.kernel.org/bpf/bpf-next/c/d6d418bd8f92 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index d27e34133973..4025266d0fb0 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c @@ -67,11 +67,12 @@ static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr, static inline int sys_bpf_prog_load(union bpf_attr *attr, unsigned int size) { + int retries = 5; int fd; do { fd = sys_bpf(BPF_PROG_LOAD, attr, size); - } while (fd < 0 && errno == EAGAIN); + } while (fd < 0 && errno == EAGAIN && retries-- > 0); return fd; }