bpf: task_group_seq_get_next: simplify the "next tid" logic
authorOleg Nesterov <oleg@redhat.com>
Tue, 5 Sep 2023 15:46:56 +0000 (17:46 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 8 Sep 2023 15:42:19 +0000 (08:42 -0700)
Kill saved_tid. It looks ugly to update *tid and then restore the
previous value if __task_pid_nr_ns() returns 0. Change this code
to update *tid and common->pid_visiting once before return.

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

index f51f476ec67990cbe6f719abf7e375677578c849..7473068ed313e4b4cd7dde4c0b2b5dabe18acc46 100644 (file)
@@ -37,7 +37,7 @@ static struct task_struct *task_group_seq_get_next(struct bpf_iter_seq_task_comm
 {
        struct task_struct *task;
        struct pid *pid;
-       u32 saved_tid;
+       u32 next_tid;
 
        if (!*tid) {
                /* The first time, the iterator calls this function. */
@@ -70,21 +70,18 @@ static struct task_struct *task_group_seq_get_next(struct bpf_iter_seq_task_comm
 retry:
        task = next_thread(task);
 
-       saved_tid = *tid;
-       *tid = __task_pid_nr_ns(task, PIDTYPE_PID, common->ns);
-       if (!*tid || *tid == common->pid) {
+       next_tid = __task_pid_nr_ns(task, PIDTYPE_PID, common->ns);
+       if (!next_tid || next_tid == common->pid) {
                /* Run out of tasks of a process.  The tasks of a
                 * thread_group are linked as circular linked list.
                 */
-               *tid = saved_tid;
                return NULL;
        }
 
-       common->pid_visiting = *tid;
-
        if (skip_if_dup_files && task->files == task->group_leader->files)
                goto retry;
 
+       *tid = common->pid_visiting = next_tid;
        get_task_struct(task);
        return task;
 }