[PATCH] skip increamenting nr for TASK_UNINTERRUPTIBLE

From: Ajeet Yadav
Date: Sat Dec 21 2013 - 06:36:05 EST


In coredump case, where thread_1 faults while thread_2 is in
TASK_UNINTERRUPTIBLE state, it cannot handle the SIGKILL.
Thus the process hangs on event.
The coredump routine freezes until the thread state is
uninterruptible.

Solution: Continue for coredump, without waiting for uninterruptible
thread, as it will get killed as soon as it returns from
uninterruptible state.
Therefore do not increament thread count for threads with
TASK_UNINTERRUPTIBLE.

Signed-off-by: Ajeet Yadav <ajeet.yadav.77@xxxxxxxxx>
Signed-off-by: Vaibhav Shinde <v.bhav.shinde@xxxxxxxxx>
---
fs/coredump.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletions(-)

diff --git a/fs/coredump.c b/fs/coredump.c
index 447b02c..54b0664 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -281,7 +281,8 @@ static int zap_process(struct task_struct *start,
int exit_code)
if (t != current && t->mm) {
sigaddset(&t->pending.signal, SIGKILL);
signal_wake_up(t, 1);
- nr++;
+ if(!(t->state & TASK_UNINTERRUPTIBLE))
+ nr++;
}
} while_each_thread(start, t);

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