Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761946AbXIZRKf (ORCPT ); Wed, 26 Sep 2007 13:10:35 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1761483AbXIZRIw (ORCPT ); Wed, 26 Sep 2007 13:08:52 -0400 Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104]:38597 "EHLO mail3-relais-sop.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761448AbXIZRIv (ORCPT ); Wed, 26 Sep 2007 13:08:51 -0400 X-IronPort-AV: E=Sophos;i="4.21,198,1188770400"; d="scan'208";a="3292260" From: Guillaume Chazarain Subject: [PATCH 7/8] taskstats: fix stats->ac_exitcode to work on threads and use group_exit_code To: Andrew Morton , Linux Kernel Mailing List Cc: Guillaume Chazarain , Balbir Singh , Jay Lan , Jonathan Lim , Oleg Nesterov Date: Wed, 26 Sep 2007 19:08:49 +0200 Message-ID: <20070926170849.31221.92539.stgit@cheypa.inria.fr> In-Reply-To: <20070926170818.31221.33994.stgit@cheypa.inria.fr> References: <20070926170818.31221.33994.stgit@cheypa.inria.fr> User-Agent: StGIT/0.13 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2320 Lines: 65 Threads also have an exit code on their own, so report it in TASKSTATS_CMD_ATTR_PID. For TASKSTATS_CMD_ATTR_TGID, instead of relying only on the exit code of the leader, we use task->signal->group_exit_code if not null as suggested by Oleg Nesterov. Also, document that as of this patch, fill_threadgroup_stats() must be called after add_tsk_stats() as it may overwrite some stats. Signed-off-by: Guillaume Chazarain Cc: Balbir Singh Cc: Jay Lan Cc: Jonathan Lim Cc: Oleg Nesterov --- kernel/taskstats.c | 2 ++ kernel/tsacct.c | 12 +++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/kernel/taskstats.c b/kernel/taskstats.c index 59fe1d8..938c0b0 100644 --- a/kernel/taskstats.c +++ b/kernel/taskstats.c @@ -208,6 +208,8 @@ static void add_tsk_stats(struct taskstats *stats, struct task_struct *task) * * Will be called on the thread group leader if requesting stats for the whole * thread group. + * fill_threadgroup_stats() may overwrite stats from add_tsk_stats(), so it + * must be called after add_tsk_stats(). */ static void fill_threadgroup_stats(struct taskstats *stats, struct task_struct *task, bool tg_stats) diff --git a/kernel/tsacct.c b/kernel/tsacct.c index 8c2f470..e83f53b 100644 --- a/kernel/tsacct.c +++ b/kernel/tsacct.c @@ -65,13 +65,15 @@ void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk) void bacct_fill_threadgroup(struct taskstats *stats, struct task_struct *tsk, bool tg_stats) { + int group_exit_code; + fill_wall_times(stats, tsk); - if (thread_group_leader(tsk)) { - stats->ac_exitcode = tsk->exit_code; - if (tsk->flags & PF_FORKNOEXEC) - stats->ac_flag |= AFORK; - } + if (thread_group_leader(tsk) && ((tsk->flags & PF_FORKNOEXEC))) + stats->ac_flag |= AFORK; + + group_exit_code = tg_stats ? tsk->signal->group_exit_code : 0; + stats->ac_exitcode = group_exit_code ? : tsk->exit_code; stats->ac_nice = task_nice(tsk); stats->ac_sched = tsk->policy; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/