On Mon, Feb 7, 2022 at 8:00 AM Yinjun Zhang <yinjun.zhang@xxxxxxxxxxxx> wrote: > > When reworking btf__get_from_id() in commit a19f93cfafdf the error > handling when calling bpf_btf_get_fd_by_id() changed. Before the rework > if bpf_btf_get_fd_by_id() failed the error would not be propagated to > callers of btf__get_from_id(), after the rework it is. This lead to a > change in behavior in print_key_value() that now prints an error when > trying to lookup keys in maps with no btf available. > > Fix this by following the way used in dumping maps to allow to look up > keys in no-btf maps, by which it decides whether and where to get the > btf info according to the btf value type. > > Fixes: a19f93cfafdf ("libbpf: Add internal helper to load BTF data by FD") > Signed-off-by: Yinjun Zhang <yinjun.zhang@xxxxxxxxxxxx> > Reviewed-by: Niklas Söderlund <niklas.soderlund@xxxxxxxxxxxx> > Signed-off-by: Simon Horman <simon.horman@xxxxxxxxxxxx> > --- > tools/bpf/bpftool/map.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c > index cc530a229812..4fc772d66e3a 100644 > --- a/tools/bpf/bpftool/map.c > +++ b/tools/bpf/bpftool/map.c > @@ -1054,11 +1054,9 @@ static void print_key_value(struct bpf_map_info *info, void *key, > json_writer_t *btf_wtr; > struct btf *btf; > > - btf = btf__load_from_kernel_by_id(info->btf_id); > - if (libbpf_get_error(btf)) { > - p_err("failed to get btf"); > + btf = get_map_kv_btf(info); > + if (libbpf_get_error(btf)) See discussion in [0], it seems relevant. [0] https://lore.kernel.org/bpf/20220204225823.339548-3-jolsa@xxxxxxxxxx/ > return; > - } > > if (json_output) { > print_entry_json(info, key, value, btf); > -- > 1.8.3.1 >