The patch titled taskstats: fix sub-threads accounting has been removed from the -mm tree. Its filename was taskstats-fix-sub-threads-accounting.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: taskstats: fix sub-threads accounting From: Oleg Nesterov <oleg@xxxxxxxxxx> If there are no listeners, taskstats_exit_send() just returns because taskstats_exit_alloc() didn't allocate *tidstats. This is wrong, each sub-thread should do fill_tgid_exit() on exit, otherwise its ->delays is not recorded in ->signal->stats and lost. Q: We don't send TASKSTATS_TYPE_AGGR_TGID when single-threaded process exits. Is it good? How can the listener figure out that it was actually a process exit, not sub-thread? Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: Balbir Singh <balbir@xxxxxxxxxx> Acked-by: Shailabh Nagar <nagar@xxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- kernel/taskstats.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff -puN kernel/taskstats.c~taskstats-fix-sub-threads-accounting kernel/taskstats.c --- a/kernel/taskstats.c~taskstats-fix-sub-threads-accounting +++ a/kernel/taskstats.c @@ -455,10 +455,9 @@ void taskstats_exit_send(struct task_str int is_thread_group; struct nlattr *na; - if (!family_registered || !tidstats) + if (!family_registered) return; - rc = 0; /* * Size includes space for nested attributes */ @@ -466,8 +465,15 @@ void taskstats_exit_send(struct task_str nla_total_size(sizeof(struct taskstats)) + nla_total_size(0); is_thread_group = (tsk->signal->stats != NULL); - if (is_thread_group) - size = 2 * size; /* PID + STATS + TGID + STATS */ + if (is_thread_group) { + /* PID + STATS + TGID + STATS */ + size = 2 * size; + /* fill the tsk->signal->stats structure */ + fill_tgid_exit(tsk); + } + + if (!tidstats) + return; rc = prepare_reply(NULL, TASKSTATS_CMD_NEW, &rep_skb, &reply, size); if (rc < 0) @@ -487,11 +493,8 @@ void taskstats_exit_send(struct task_str goto send; /* - * tsk has/had a thread group so fill the tsk->signal->stats structure * Doesn't matter if tsk is the leader or the last group member leaving */ - - fill_tgid_exit(tsk); if (!group_dead) goto send; _ Patches currently in -mm which might be from oleg@xxxxxxxxxx are origin.patch taskstats_exit_alloc-optimize-simplify.patch taskstats-cleanup-do_exit-path.patch taskstats-cleanup-signal-stats-allocation.patch tty-signal-tty-locking.patch do_task_stat-dont-take-tty_mutex.patch do_acct_process-dont-take-tty_mutex.patch trivial-make-set_special_pids-static.patch sys_unshare-remove-a-broken-clone_sighand-code.patch sys_setpgid-eliminate-unnecessary-do_each_task_pidpidtype_pgid.patch session_of_pgrp-kill-unnecessary-do_each_task_pidpidtype_pgid.patch pidhash-temporary-debug-checks.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html