mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
hung_task: fix false positive during vfork
vfork parent uninterruptibly and unkillably waits for its child to exec/exit. This wait is of unbounded length. Ignore such waits in the hung_task detector. Signed-off-by: Mandeep Singh Baines <msb@chromium.org> Reported-by: Sasha Levin <levinsasha928@gmail.com> LKML-Reference: <1325344394.28904.43.camel@lappy> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: John Kacur <jkacur@redhat.com> Cc: stable@kernel.org Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
30e053248d
commit
f9fab10bbd
@ -74,11 +74,17 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
|
||||
|
||||
/*
|
||||
* Ensure the task is not frozen.
|
||||
* Also, when a freshly created task is scheduled once, changes
|
||||
* its state to TASK_UNINTERRUPTIBLE without having ever been
|
||||
* switched out once, it musn't be checked.
|
||||
* Also, skip vfork and any other user process that freezer should skip.
|
||||
*/
|
||||
if (unlikely(t->flags & PF_FROZEN || !switch_count))
|
||||
if (unlikely(t->flags & (PF_FROZEN | PF_FREEZER_SKIP)))
|
||||
return;
|
||||
|
||||
/*
|
||||
* When a freshly created task is scheduled once, changes its state to
|
||||
* TASK_UNINTERRUPTIBLE without having ever been switched out once, it
|
||||
* musn't be checked.
|
||||
*/
|
||||
if (unlikely(!switch_count))
|
||||
return;
|
||||
|
||||
if (switch_count != t->last_switch_count) {
|
||||
|
Loading…
Reference in New Issue
Block a user