]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bpf: bpf_iter_task_next: use next_task(kit->task) rather than next_task(kit->pos)
authorOleg Nesterov <oleg@redhat.com>
Tue, 14 Nov 2023 16:32:39 +0000 (17:32 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Sun, 19 Nov 2023 19:43:44 +0000 (11:43 -0800)
This looks more clear and simplifies the code. While at it, remove the
unnecessary initialization of pos/task at the start of bpf_iter_task_new().

Note that we can even kill kit->task, we can just use pos->group_leader,
but I don't understand the BUILD_BUG_ON() checks in bpf_iter_task_new().

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20231114163239.GA903@redhat.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/task_iter.c

index d42e08d0d0b791c16a25f91a7ad2c01f7ac78544..e5c3500443c6e71f4fca7a6403dc33aa054d6fd8 100644 (file)
@@ -978,7 +978,6 @@ __bpf_kfunc int bpf_iter_task_new(struct bpf_iter_task *it,
        BUILD_BUG_ON(__alignof__(struct bpf_iter_task_kern) !=
                                        __alignof__(struct bpf_iter_task));
 
-       kit->task = kit->pos = NULL;
        switch (flags) {
        case BPF_TASK_ITER_ALL_THREADS:
        case BPF_TASK_ITER_ALL_PROCS:
@@ -1016,18 +1015,15 @@ __bpf_kfunc struct task_struct *bpf_iter_task_next(struct bpf_iter_task *it)
                goto get_next_task;
 
        kit->pos = __next_thread(kit->pos);
-       if (!kit->pos) {
-               if (flags == BPF_TASK_ITER_PROC_THREADS)
-                       return pos;
-               kit->pos = kit->task;
-       } else
+       if (kit->pos || flags == BPF_TASK_ITER_PROC_THREADS)
                return pos;
 
 get_next_task:
-       kit->pos = next_task(kit->pos);
-       kit->task = kit->pos;
-       if (kit->pos == &init_task)
+       kit->task = next_task(kit->task);
+       if (kit->task == &init_task)
                kit->pos = NULL;
+       else
+               kit->pos = kit->task;
 
        return pos;
 }