getrusage: use __for_each_thread()
authorOleg Nesterov <oleg@redhat.com>
Sat, 9 Sep 2023 17:26:29 +0000 (19:26 +0200)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 4 Oct 2023 17:41:57 +0000 (10:41 -0700)
do/while_each_thread should be avoided when possible.

Plus this change allows to avoid lock_task_sighand(), we can use rcu
and/or sig->stats_lock instead.

Link: https://lkml.kernel.org/r/20230909172629.GA20454@redhat.com
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
kernel/sys.c

index 097cbea62a72ef8484aab7e70970c03d8fa4ad4e..67436d465be45160772e6977c3b97dd20194fd43 100644 (file)
@@ -1830,10 +1830,8 @@ void getrusage(struct task_struct *p, int who, struct rusage *r)
                r->ru_oublock += sig->oublock;
                if (maxrss < sig->maxrss)
                        maxrss = sig->maxrss;
-               t = p;
-               do {
+               __for_each_thread(sig, t)
                        accumulate_thread_rusage(t, r);
-               } while_each_thread(p, t);
                break;
 
        default: