Contrary to what the comment in __exit_signal() says we do account the
group leader. Fix this and explain why.

Signed-off-by: Oleg Nesterov <o...@redhat.com>
---
 kernel/exit.c |   11 ++++-------
 1 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/kernel/exit.c b/kernel/exit.c
index e0914eb..f773863 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -118,13 +118,10 @@ static void __exit_signal(struct task_struct *tsk)
        }
 
        /*
-        * Accumulate here the counters for all threads but the group leader
-        * as they die, so they can be added into the process-wide totals
-        * when those are taken.  The group leader stays around as a zombie as
-        * long as there are other threads.  When it gets reaped, the exit.c
-        * code will add its counts into these totals.  We won't ever get here
-        * for the group leader, since it will have been the last reference on
-        * the signal_struct.
+        * Accumulate here the counters for all threads as they die. We could
+        * skip the group leader because it is the last user of signal_struct,
+        * but we want to avoid the race with thread_group_cputime() which can
+        * see the empty ->thread_head list.
         */
        task_cputime(tsk, &utime, &stime);
        write_seqlock(&sig->stats_lock);
-- 
1.5.5.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to