Commit 48a6d64e authored by John Siddle's avatar John Siddle Committed by Linus Torvalds

hung_task: allow hung_task_panic when hung_task_warnings is 0

Previously hung_task_panic would not be respected if enabled after
hung_task_warnings had already been decremented to 0.

Permit the kernel to panic if hung_task_panic is enabled after
hung_task_warnings has already been decremented to 0 and another task
hangs for hung_task_timeout_secs seconds.

Check if hung_task_panic is enabled so we don't return prematurely, and
check if hung_task_warnings is non-zero so we don't print the warning
unnecessarily.

[akpm@linux-foundation.org: fix off-by-one]
Link: http://lkml.kernel.org/r/1473450214-4049-1-git-send-email-jsiddle@redhat.comSigned-off-by: default avatarJohn Siddle <jsiddle@redhat.com>
Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e154ccc8
...@@ -98,26 +98,26 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout) ...@@ -98,26 +98,26 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
trace_sched_process_hang(t); trace_sched_process_hang(t);
if (!sysctl_hung_task_warnings) if (!sysctl_hung_task_warnings && !sysctl_hung_task_panic)
return; return;
if (sysctl_hung_task_warnings > 0)
sysctl_hung_task_warnings--;
/* /*
* Ok, the task did not get scheduled for more than 2 minutes, * Ok, the task did not get scheduled for more than 2 minutes,
* complain: * complain:
*/ */
pr_err("INFO: task %s:%d blocked for more than %ld seconds.\n", if (sysctl_hung_task_warnings) {
t->comm, t->pid, timeout); sysctl_hung_task_warnings--;
pr_err(" %s %s %.*s\n", pr_err("INFO: task %s:%d blocked for more than %ld seconds.\n",
print_tainted(), init_utsname()->release, t->comm, t->pid, timeout);
(int)strcspn(init_utsname()->version, " "), pr_err(" %s %s %.*s\n",
init_utsname()->version); print_tainted(), init_utsname()->release,
pr_err("\"echo 0 > /proc/sys/kernel/hung_task_timeout_secs\"" (int)strcspn(init_utsname()->version, " "),
" disables this message.\n"); init_utsname()->version);
sched_show_task(t); pr_err("\"echo 0 > /proc/sys/kernel/hung_task_timeout_secs\""
debug_show_all_locks(); " disables this message.\n");
sched_show_task(t);
debug_show_all_locks();
}
touch_nmi_watchdog(); touch_nmi_watchdog();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment