coredump: use a freezable_schedule for the coredump_finish wait

Prevents hung_task detector from panicing the machine. This is also
needed to prevent this wait from blocking suspend.

(It doesnt' currently block suspend but it would once the next
patch in this series is applied.)

[yongjun_wei@trendmicro.com.cn: kernel/exit.c: remove duplicated include]
Signed-off-by: Mandeep Singh Baines <msb@chromium.org>
Cc: Ben Chan <benchan@chromium.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Ingo Molnar <mingo@redhat.com>
Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Mandeep Singh Baines 2013-02-27 17:03:20 -08:00 committed by Linus Torvalds
parent 6aa9707099
commit 80d26af89a
1 changed files with 2 additions and 2 deletions

View File

@ -20,6 +20,7 @@
#include <linux/tsacct_kern.h> #include <linux/tsacct_kern.h>
#include <linux/file.h> #include <linux/file.h>
#include <linux/fdtable.h> #include <linux/fdtable.h>
#include <linux/freezer.h>
#include <linux/binfmts.h> #include <linux/binfmts.h>
#include <linux/nsproxy.h> #include <linux/nsproxy.h>
#include <linux/pid_namespace.h> #include <linux/pid_namespace.h>
@ -31,7 +32,6 @@
#include <linux/mempolicy.h> #include <linux/mempolicy.h>
#include <linux/taskstats_kern.h> #include <linux/taskstats_kern.h>
#include <linux/delayacct.h> #include <linux/delayacct.h>
#include <linux/freezer.h>
#include <linux/cgroup.h> #include <linux/cgroup.h>
#include <linux/syscalls.h> #include <linux/syscalls.h>
#include <linux/signal.h> #include <linux/signal.h>
@ -485,7 +485,7 @@ static void exit_mm(struct task_struct * tsk)
set_task_state(tsk, TASK_UNINTERRUPTIBLE); set_task_state(tsk, TASK_UNINTERRUPTIBLE);
if (!self.task) /* see coredump_finish() */ if (!self.task) /* see coredump_finish() */
break; break;
schedule(); freezable_schedule();
} }
__set_task_state(tsk, TASK_RUNNING); __set_task_state(tsk, TASK_RUNNING);
down_read(&mm->mmap_sem); down_read(&mm->mmap_sem);