oom: prevent livelock when oom_kill_allocating_task is set
authorDavid Rientjes <rientjes@google.com>
Wed, 6 May 2009 23:02:55 +0000 (16:02 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 6 May 2009 23:36:09 +0000 (16:36 -0700)
commit184101bf143ac96d62b3dcc17e7b3550f98d3350
treec16b7d56d5603ae9d120a99cbf814195d750a380
parentdf3935ffd6166fdd00702cf548fb5bb55737758b
oom: prevent livelock when oom_kill_allocating_task is set

When /proc/sys/vm/oom_kill_allocating_task is set for large systems that
want to avoid the lengthy tasklist scan, it's possible to livelock if
current is ineligible for oom kill.  This normally happens when it is set
to OOM_DISABLE, but is also possible if any threads are sharing the same
->mm with a different tgid.

So change __out_of_memory() to fall back to the full task-list scan if it
was unable to kill `current'.

Cc: Nick Piggin <npiggin@suse.de>
Signed-off-by: David Rientjes <rientjes@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/oom_kill.c