Message ID | 20201202231332.3923644-1-sdf@google.com (mailing list archive) |
---|---|
State | Accepted |
Commit | d6d418bd8f92aaa4c7c26d606188147c2ee0dae9 |
Delegated to: | BPF |
Headers | show |
Series | [bpf-next] libbpf: cap retries in sys_bpf_prog_load | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for bpf-next |
netdev/subject_prefix | success | Link |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 13 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
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; }