Message ID | 20210728093321.16500-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 |
在 2021/7/28 下午5:33, Feng zhou 写道: > 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> > --- > lib/bpf_legacy.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/lib/bpf_legacy.c b/lib/bpf_legacy.c > index 8a03b9c2..80c49f08 100644 > --- a/lib/bpf_legacy.c > +++ b/lib/bpf_legacy.c > @@ -1525,13 +1525,13 @@ retry: > fd = bpf_prog_load_dev(prog->type, prog->insns, prog->size, > prog->license, ctx->ifindex, > ctx->log, ctx->log_size); > - if (fd < 0 || ctx->verbose) { > + if (fd < 0 && ctx->verbose) { > /* The verifier log is pretty chatty, sometimes so chatty > * on larger programs, that we could fail to dump everything > * 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 (errno == ENOSPC) { > if (tries++ < 10 && !bpf_log_realloc(ctx)) > goto retry; > > @@ -2068,8 +2068,8 @@ retry: > errno = 0; > 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 && ctx->verbose) { > + if (errno == ENOSPC) { > if (tries++ < 10 && !bpf_log_realloc(ctx)) > goto retry; > > Sorry, this patch is wrong. please ignore it. I will send a new one.
diff --git a/lib/bpf_legacy.c b/lib/bpf_legacy.c index 8a03b9c2..80c49f08 100644 --- a/lib/bpf_legacy.c +++ b/lib/bpf_legacy.c @@ -1525,13 +1525,13 @@ retry: fd = bpf_prog_load_dev(prog->type, prog->insns, prog->size, prog->license, ctx->ifindex, ctx->log, ctx->log_size); - if (fd < 0 || ctx->verbose) { + if (fd < 0 && ctx->verbose) { /* The verifier log is pretty chatty, sometimes so chatty * on larger programs, that we could fail to dump everything * 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 (errno == ENOSPC) { if (tries++ < 10 && !bpf_log_realloc(ctx)) goto retry; @@ -2068,8 +2068,8 @@ retry: errno = 0; 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 && ctx->verbose) { + if (errno == ENOSPC) { if (tries++ < 10 && !bpf_log_realloc(ctx)) goto retry;