mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
bpftool: Fix error message of strerror
strerror() expects a positive errno, however variable err will never be positive when an error occurs. This causes bpftool to output too many "unknown error", even a simple "file not exist" error can not get an accurate message. This patch fixed all "strerror(err)" patterns in bpftool. Specially in btf.c#L823, hashmap__append() is an internal function of libbpf and will not change errno, so there's a little difference. Some libbpf_get_error() calls are kept for return values. Changes since v1: https://lore.kernel.org/bpf/SY4P282MB1084B61CD8671DFA395AA8579D539@SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM/ Check directly for NULL values instead of calling libbpf_get_error(). Signed-off-by: Tianyi Liu <i.pear@outlook.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Reviewed-by: Quentin Monnet <quentin@isovalent.com> Link: https://lore.kernel.org/bpf/SY4P282MB1084AD9CD84A920F08DF83E29D549@SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM
This commit is contained in:
parent
51e05a8cf8
commit
3ca2fb4974
3 changed files with 10 additions and 12 deletions
|
@ -635,10 +635,9 @@ static int do_dump(int argc, char **argv)
|
||||||
|
|
||||||
btf = btf__parse_split(*argv, base ?: base_btf);
|
btf = btf__parse_split(*argv, base ?: base_btf);
|
||||||
err = libbpf_get_error(btf);
|
err = libbpf_get_error(btf);
|
||||||
if (err) {
|
if (!btf) {
|
||||||
btf = NULL;
|
|
||||||
p_err("failed to load BTF from %s: %s",
|
p_err("failed to load BTF from %s: %s",
|
||||||
*argv, strerror(err));
|
*argv, strerror(errno));
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
|
@ -683,8 +682,8 @@ static int do_dump(int argc, char **argv)
|
||||||
|
|
||||||
btf = btf__load_from_kernel_by_id_split(btf_id, base_btf);
|
btf = btf__load_from_kernel_by_id_split(btf_id, base_btf);
|
||||||
err = libbpf_get_error(btf);
|
err = libbpf_get_error(btf);
|
||||||
if (err) {
|
if (!btf) {
|
||||||
p_err("get btf by id (%u): %s", btf_id, strerror(err));
|
p_err("get btf by id (%u): %s", btf_id, strerror(errno));
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -820,7 +819,7 @@ build_btf_type_table(struct hashmap *tab, enum bpf_obj_type type,
|
||||||
u32_as_hash_field(id));
|
u32_as_hash_field(id));
|
||||||
if (err) {
|
if (err) {
|
||||||
p_err("failed to append entry to hashmap for BTF ID %u, object ID %u: %s",
|
p_err("failed to append entry to hashmap for BTF ID %u, object ID %u: %s",
|
||||||
btf_id, id, strerror(errno));
|
btf_id, id, strerror(-err));
|
||||||
goto err_free;
|
goto err_free;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1594,14 +1594,14 @@ static int do_object(int argc, char **argv)
|
||||||
|
|
||||||
err = bpf_linker__add_file(linker, file, NULL);
|
err = bpf_linker__add_file(linker, file, NULL);
|
||||||
if (err) {
|
if (err) {
|
||||||
p_err("failed to link '%s': %s (%d)", file, strerror(err), err);
|
p_err("failed to link '%s': %s (%d)", file, strerror(errno), errno);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = bpf_linker__finalize(linker);
|
err = bpf_linker__finalize(linker);
|
||||||
if (err) {
|
if (err) {
|
||||||
p_err("failed to finalize ELF file: %s (%d)", strerror(err), err);
|
p_err("failed to finalize ELF file: %s (%d)", strerror(errno), errno);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -188,10 +188,9 @@ int do_event_pipe(int argc, char **argv)
|
||||||
opts.map_keys = &ctx.idx;
|
opts.map_keys = &ctx.idx;
|
||||||
pb = perf_buffer__new_raw(map_fd, MMAP_PAGE_CNT, &perf_attr,
|
pb = perf_buffer__new_raw(map_fd, MMAP_PAGE_CNT, &perf_attr,
|
||||||
print_bpf_output, &ctx, &opts);
|
print_bpf_output, &ctx, &opts);
|
||||||
err = libbpf_get_error(pb);
|
if (!pb) {
|
||||||
if (err) {
|
|
||||||
p_err("failed to create perf buffer: %s (%d)",
|
p_err("failed to create perf buffer: %s (%d)",
|
||||||
strerror(err), err);
|
strerror(errno), errno);
|
||||||
goto err_close_map;
|
goto err_close_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +205,7 @@ int do_event_pipe(int argc, char **argv)
|
||||||
err = perf_buffer__poll(pb, 200);
|
err = perf_buffer__poll(pb, 200);
|
||||||
if (err < 0 && err != -EINTR) {
|
if (err < 0 && err != -EINTR) {
|
||||||
p_err("perf buffer polling failed: %s (%d)",
|
p_err("perf buffer polling failed: %s (%d)",
|
||||||
strerror(err), err);
|
strerror(errno), errno);
|
||||||
goto err_close_pb;
|
goto err_close_pb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue