bpf: Print error message for bpftool cgroup show
PATCH v2 1/1 bpf: Print error message for bpftool cgroup show
Currently, when bpftool cgroup show <path> has an error, no error message is printed. This is confusing because the user may think the result is empty.
Before the change:
$ bpftool cgroup show /sys/fs/cgroup ID AttachType AttachFlags Name $ echo $? 255
After the change:
$ ./bpftool cgroup show /sys/fs/cgroup Error: can't query bpf programs attached to /sys/fs/cgroup: Operation not permitted
v2: Rename check_query_cgroup_progs to cgroup_has_attached_progs
Signed-off-by Hechao Li <[email protected]>
--- tools/bpf/bpftool/cgroup.c | 56 ++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 17 deletions(-)
tools/bpf/bpftool/cgroup.c +39 -17
@@ -117,6 +117,25 @@ static int count_attached_bpf_progs(int cgroup_fd, enum bpf_attach_type type)return prog_cnt; } +static int cgroup_has_attached_progs (int cgroup_fd) +{ +enum bpf_attach_type type; +bool no_prog = true; + +for (type =0 ; type < __MAX_BPF_ATTACH_TYPE; type++) { +int count =count_attached_bpf_progs (cgroup_fd, type); + +if (count <0 && errno !=EINVAL ) +return -1 ; + +if (count >0 ) { + no_prog = false; +break ; + } + } + +return no_prog ?0 :1 ; +}static int show_attached_bpf_progs (int cgroup_fd,enum bpf_attach_type type,int level) {
@@ -161,6 +180,7 @@ static int show_attached_bpf_progs(int cgroup_fd, enum bpf_attach_type type,static int do_show (int argc,char **argv) {enum bpf_attach_type type; +int has_attached_progs;const char *path;int cgroup_fd;int ret =-1 ;
@@ -192,6 +212,16 @@ static int do_show(int argc, char **argv) goto exit; } + has_attached_progs =cgroup_has_attached_progs (cgroup_fd); +if (has_attached_progs <0 ) { +p_err ("can't query bpf programs attached to %s: %s" , + path,strerror (errno)); + goto exit_cgroup; + }else if (!has_attached_progs) { + ret =0 ; + goto exit_cgroup; + } +if (json_output)jsonw_start_array (json_wtr);else
@@ -212,6 +242,7 @@ static int do_show(int argc, char **argv)if (json_output)jsonw_end_array (json_wtr); +exit_cgroup:close (cgroup_fd); exit:return ret;
@@ -228,7 +259,7 @@ static int do_show_tree_fn(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftw) { enum bpf_attach_type type; -bool skip = true; +int has_attached_progs;int cgroup_fd;if (typeflag !=FTW_D )
@@ -240,22 +271,13 @@ static int do_show_tree_fn(const char *fpath, const struct stat *sb,return SHOW_TREE_FN_ERR ; } -for (type =0 ; type < __MAX_BPF_ATTACH_TYPE; type++) { -int count =count_attached_bpf_progs (cgroup_fd, type); - -if (count <0 && errno !=EINVAL ) { -p_err ("can't query bpf programs attached to %s: %s" , - fpath,strerror (errno)); -close (cgroup_fd); -return SHOW_TREE_FN_ERR ; - } -if (count >0 ) { - skip = false; -break ; - } - } - -if (skip) { + has_attached_progs =cgroup_has_attached_progs (cgroup_fd); +if (has_attached_progs <0 ) { +p_err ("can't query bpf programs attached to %s: %s" , + fpath,strerror (errno)); +close (cgroup_fd); +return SHOW_TREE_FN_ERR ; + }else if (!has_attached_progs) {close (cgroup_fd);return 0 ; }
Signature · 1 line
2.17.1
Quoted 11 lines · Hechao Li
Currently, when bpftool cgroup show <path> has an error, no error message is printed. This is confusing because the user may think the result is empty.
Before the change:
$ bpftool cgroup show /sys/fs/cgroup ID AttachType AttachFlags Name $ echo $? 255
Quoted 8 lines
After the change:
$ ./bpftool cgroup show /sys/fs/cgroup Error: can't query bpf programs attached to /sys/fs/cgroup: Operation not permittedv2: Rename
check_query_cgroup_progstocgroup_has_attached_progsSigned-off-by Hechao Li <[email protected]>
Applied, thanks!