bpf: Replace usage of supported with dedicated list iterator variable
authorJakob Koschel <jakobkoschel@gmail.com>
Thu, 31 Mar 2022 09:19:29 +0000 (11:19 +0200)
committerAndrii Nakryiko <andrii@kernel.org>
Sun, 3 Apr 2022 23:33:36 +0000 (16:33 -0700)
To move the list iterator variable into the list_for_each_entry_*()
macro in the future it should be avoided to use the list iterator
variable after the loop body.

To *never* use the list iterator variable after the loop it was
concluded to use a separate iterator variable instead of a
found boolean [1].

This removes the need to use the found variable (existed & supported)
and simply checking if the variable was set, can determine if the
break/goto was hit.

[1] https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/

Signed-off-by: Jakob Koschel <jakobkoschel@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20220331091929.647057-1-jakobkoschel@gmail.com
kernel/bpf/bpf_iter.c

index 110029e..dea920b 100644 (file)
@@ -330,35 +330,34 @@ static void cache_btf_id(struct bpf_iter_target_info *tinfo,
 bool bpf_iter_prog_supported(struct bpf_prog *prog)
 {
        const char *attach_fname = prog->aux->attach_func_name;
+       struct bpf_iter_target_info *tinfo = NULL, *iter;
        u32 prog_btf_id = prog->aux->attach_btf_id;
        const char *prefix = BPF_ITER_FUNC_PREFIX;
-       struct bpf_iter_target_info *tinfo;
        int prefix_len = strlen(prefix);
-       bool supported = false;
 
        if (strncmp(attach_fname, prefix, prefix_len))
                return false;
 
        mutex_lock(&targets_mutex);
-       list_for_each_entry(tinfo, &targets, list) {
-               if (tinfo->btf_id && tinfo->btf_id == prog_btf_id) {
-                       supported = true;
+       list_for_each_entry(iter, &targets, list) {
+               if (iter->btf_id && iter->btf_id == prog_btf_id) {
+                       tinfo = iter;
                        break;
                }
-               if (!strcmp(attach_fname + prefix_len, tinfo->reg_info->target)) {
-                       cache_btf_id(tinfo, prog);
-                       supported = true;
+               if (!strcmp(attach_fname + prefix_len, iter->reg_info->target)) {
+                       cache_btf_id(iter, prog);
+                       tinfo = iter;
                        break;
                }
        }
        mutex_unlock(&targets_mutex);
 
-       if (supported) {
+       if (tinfo) {
                prog->aux->ctx_arg_info_size = tinfo->reg_info->ctx_arg_info_size;
                prog->aux->ctx_arg_info = tinfo->reg_info->ctx_arg_info;
        }
 
-       return supported;
+       return tinfo != NULL;
 }
 
 const struct bpf_func_proto *
@@ -499,12 +498,11 @@ bool bpf_link_is_iter(struct bpf_link *link)
 int bpf_iter_link_attach(const union bpf_attr *attr, bpfptr_t uattr,
                         struct bpf_prog *prog)
 {
+       struct bpf_iter_target_info *tinfo = NULL, *iter;
        struct bpf_link_primer link_primer;
-       struct bpf_iter_target_info *tinfo;
        union bpf_iter_link_info linfo;
        struct bpf_iter_link *link;
        u32 prog_btf_id, linfo_len;
-       bool existed = false;
        bpfptr_t ulinfo;
        int err;
 
@@ -530,14 +528,14 @@ int bpf_iter_link_attach(const union bpf_attr *attr, bpfptr_t uattr,
 
        prog_btf_id = prog->aux->attach_btf_id;
        mutex_lock(&targets_mutex);
-       list_for_each_entry(tinfo, &targets, list) {
-               if (tinfo->btf_id == prog_btf_id) {
-                       existed = true;
+       list_for_each_entry(iter, &targets, list) {
+               if (iter->btf_id == prog_btf_id) {
+                       tinfo = iter;
                        break;
                }
        }
        mutex_unlock(&targets_mutex);
-       if (!existed)
+       if (!tinfo)
                return -ENOENT;
 
        link = kzalloc(sizeof(*link), GFP_USER | __GFP_NOWARN);