taskstats: fill_stats_for_tgid: use for_each_thread()
PATCH 1/1 taskstats: fill_stats_for_tgid: use for_each_thread()
do/while_each_thread should be avoided when possible.
Plus I _think_ this change allows to avoid lock_task_sighand() but I am not sure, I forgot everything about taskstats. In any case, this code does not look right in that the same thread can be accounted twice: taskstats_exit() can account the exiting thread in signal->stats and drop ->siglock but this thread is still on the thread-group list, so lock_task_sighand() can't help.
Signed-off-by Oleg Nesterov <[email protected]>
--- kernel/taskstats.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
kernel/taskstats.c +2 -3
@@ -233,9 +233,8 @@ static int fill_stats_for_tgid(pid_t tgid, struct taskstats *stats)else memset (stats,0 ,sizeof (*stats)); - tsk = first; start_time =ktime_get_ns (); - do { +for_each_thread (first, tsk) {if (tsk->exit_state)continue ;/*
@@ -258,7 +257,7 @@ static int fill_stats_for_tgid(pid_t tgid, struct taskstats *stats) stats->nvcsw += tsk->nvcsw; stats->nivcsw += tsk->nivcsw; - }while_each_thread (first, tsk); + }unlock_task_sighand (first, &flags); rc =0 ;
Signature · 1 line
2.25.1.362.g51ebf55