diff options
author | Andrii Nakryiko <andrii@kernel.org> | 2021-05-25 06:59:34 +0300 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2021-05-26 03:32:35 +0300 |
commit | e9fc3ce99b3485586e7e4803b63df8b4c681f897 (patch) | |
tree | 7ef5011edf4c52e1a9ff707d3e5f2f3cf87f9cb1 /tools/bpf | |
parent | f12b654327283d158de0af170943ec5dd8cd02e5 (diff) | |
download | linux-e9fc3ce99b3485586e7e4803b63df8b4c681f897.tar.xz |
libbpf: Streamline error reporting for high-level APIs
Implement changes to error reporting for high-level libbpf APIs to make them
less surprising and less error-prone to users:
- in all the cases when error happens, errno is set to an appropriate error
value;
- in libbpf 1.0 mode, all pointer-returning APIs return NULL on error and
error code is communicated through errno; this applies both to APIs that
already returned NULL before (so now they communicate more detailed error
codes), as well as for many APIs that used ERR_PTR() macro and encoded
error numbers as fake pointers.
- in legacy (default) mode, those APIs that were returning ERR_PTR(err),
continue doing so, but still set errno.
With these changes, errno can be always used to extract actual error,
regardless of legacy or libbpf 1.0 modes. This is utilized internally in
libbpf in places where libbpf uses it's own high-level APIs.
libbpf_get_error() is adapted to handle both cases completely transparently to
end-users (and is used by libbpf consistently as well).
More context, justification, and discussion can be found in "Libbpf: the road
to v1.0" document ([0]).
[0] https://docs.google.com/document/d/1UyjTZuPFWiPFyKk1tV5an11_iaRuec6U-ZESZ54nNTY
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
Link: https://lore.kernel.org/bpf/20210525035935.1461796-5-andrii@kernel.org
Diffstat (limited to 'tools/bpf')
0 files changed, 0 insertions, 0 deletions