Message ID | 20210729045516.7373-1-zhoufeng.zf@bytedance.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | BPF |
Headers | show |
Series | lib/bpf: Fix btf_load error lead to enable debug log | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
On Wed, Jul 28, 2021 at 9:55 PM Feng zhou <zhoufeng.zf@bytedance.com> wrote: > > From: Feng Zhou <zhoufeng.zf@bytedance.com> > > Use tc with no verbose, when bpf_btf_attach fail, > the conditions: > "if (fd < 0 && (errno == ENOSPC || !ctx->log_size))" > will make ctx->log_size != 0. And then, bpf_prog_attach, > ctx->log_size != 0. so enable debug log. > The verifier log sometimes is so chatty on larger programs. > bpf_prog_attach is failed. > "Log buffer too small to dump verifier log 16777215 bytes (9 tries)!" > > BTF load failure does not affect prog load. prog still work. > So when BTF/PROG load fail, enlarge log_size and re-fail with > having verbose. > > Signed-off-by: Feng Zhou <zhoufeng.zf@bytedance.com> > --- This seems to be targeted against iproute2? It would be good to specify that as [PATCH iproute2] or something. > lib/bpf_legacy.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/lib/bpf_legacy.c b/lib/bpf_legacy.c > index 8a03b9c2..d824388c 100644 > --- a/lib/bpf_legacy.c > +++ b/lib/bpf_legacy.c > @@ -1531,7 +1531,7 @@ retry: > * into our buffer. Still, try to give a debuggable error > * log for the user, so enlarge it and re-fail. > */ > - if (fd < 0 && (errno == ENOSPC || !ctx->log_size)) { > + if (fd < 0 && errno == ENOSPC) { > if (tries++ < 10 && !bpf_log_realloc(ctx)) > goto retry; > > @@ -2069,7 +2069,7 @@ retry: > fd = bpf_btf_load(ctx->btf_data->d_buf, ctx->btf_data->d_size, > ctx->log, ctx->log_size); > if (fd < 0 || ctx->verbose) { > - if (fd < 0 && (errno == ENOSPC || !ctx->log_size)) { > + if (fd < 0 && errno == ENOSPC) { > if (tries++ < 10 && !bpf_log_realloc(ctx)) > goto retry; > > -- > 2.11.0 >
在 2021/7/31 上午2:40, Andrii Nakryiko 写道: > On Wed, Jul 28, 2021 at 9:55 PM Feng zhou <zhoufeng.zf@bytedance.com> wrote: >> >> From: Feng Zhou <zhoufeng.zf@bytedance.com> >> >> Use tc with no verbose, when bpf_btf_attach fail, >> the conditions: >> "if (fd < 0 && (errno == ENOSPC || !ctx->log_size))" >> will make ctx->log_size != 0. And then, bpf_prog_attach, >> ctx->log_size != 0. so enable debug log. >> The verifier log sometimes is so chatty on larger programs. >> bpf_prog_attach is failed. >> "Log buffer too small to dump verifier log 16777215 bytes (9 tries)!" >> >> BTF load failure does not affect prog load. prog still work. >> So when BTF/PROG load fail, enlarge log_size and re-fail with >> having verbose. >> >> Signed-off-by: Feng Zhou <zhoufeng.zf@bytedance.com> >> --- > > This seems to be targeted against iproute2? It would be good to > specify that as [PATCH iproute2] or something. > > Yeah, it's a good idea. I will resend it. >> lib/bpf_legacy.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/lib/bpf_legacy.c b/lib/bpf_legacy.c >> index 8a03b9c2..d824388c 100644 >> --- a/lib/bpf_legacy.c >> +++ b/lib/bpf_legacy.c >> @@ -1531,7 +1531,7 @@ retry: >> * into our buffer. Still, try to give a debuggable error >> * log for the user, so enlarge it and re-fail. >> */ >> - if (fd < 0 && (errno == ENOSPC || !ctx->log_size)) { >> + if (fd < 0 && errno == ENOSPC) { >> if (tries++ < 10 && !bpf_log_realloc(ctx)) >> goto retry; >> >> @@ -2069,7 +2069,7 @@ retry: >> fd = bpf_btf_load(ctx->btf_data->d_buf, ctx->btf_data->d_size, >> ctx->log, ctx->log_size); >> if (fd < 0 || ctx->verbose) { >> - if (fd < 0 && (errno == ENOSPC || !ctx->log_size)) { >> + if (fd < 0 && errno == ENOSPC) { >> if (tries++ < 10 && !bpf_log_realloc(ctx)) >> goto retry; >> >> -- >> 2.11.0 >>
diff --git a/lib/bpf_legacy.c b/lib/bpf_legacy.c index 8a03b9c2..d824388c 100644 --- a/lib/bpf_legacy.c +++ b/lib/bpf_legacy.c @@ -1531,7 +1531,7 @@ retry: * into our buffer. Still, try to give a debuggable error * log for the user, so enlarge it and re-fail. */ - if (fd < 0 && (errno == ENOSPC || !ctx->log_size)) { + if (fd < 0 && errno == ENOSPC) { if (tries++ < 10 && !bpf_log_realloc(ctx)) goto retry; @@ -2069,7 +2069,7 @@ retry: fd = bpf_btf_load(ctx->btf_data->d_buf, ctx->btf_data->d_size, ctx->log, ctx->log_size); if (fd < 0 || ctx->verbose) { - if (fd < 0 && (errno == ENOSPC || !ctx->log_size)) { + if (fd < 0 && errno == ENOSPC) { if (tries++ < 10 && !bpf_log_realloc(ctx)) goto retry;