Re: [PATCH bpf-next v1 7/7] tools: bpftool: add error message on map pinning failure

From: Quentin Monnet
Date: Wed Mar 20 2019 - 15:01:33 EST


2019-03-20 18:33 UTC+0100 ~ Alban Crequy <alban.crequy@xxxxxxxxx>
> From: Alban Crequy <alban@xxxxxxxxxx>
>
> Symptoms, when "dir" does not exist:
>
> $ sudo bpftool map create /sys/fs/bpf/dir/fooB type hash key 8 value 8 entries 8 name fooB flags 1
> $ echo $?
> 255
>
> This patch prints an error message when the map pinning fails.
>
> Signed-off-by: Alban Crequy <alban@xxxxxxxxxx>
> ---
> tools/bpf/bpftool/map.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c
> index 9befcabc299d..c825eb1bbf8f 100644
> --- a/tools/bpf/bpftool/map.c
> +++ b/tools/bpf/bpftool/map.c
> @@ -1305,8 +1305,10 @@ static int do_create(int argc, char **argv)
>
> err = do_pin_fd(fd, pinfile);
> close(fd);
> - if (err)
> + if (err) {
> + p_err("failed to pin map to %s", pinfile);
> return err;
> + }

do_pin_fd() is already susceptible to print an error message, and this
may lead to several messages (thus breaking JSON output).

Instead, you could change do_pin_fd() to store the result from
bpf_obj_pin(), compare it, and print the message there if non-0.

>
> if (json_output)
> jsonw_null(json_wtr);
>