aboutsummaryrefslogtreecommitdiffstats
path: root/mm/oom_kill.c
diff options
context:
space:
mode:
authorKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>2009-01-07 21:08:08 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2009-01-08 11:31:06 -0500
commita636b327f731143ccc544b966cfd8de6cb6d72c6 (patch)
treee53b03b64e8ebca20649c2d877bc4c3ef54ec34c /mm/oom_kill.c
parent2e4d40915fb85207fe48cfc31201824ec6d7426e (diff)
memcg: avoid unnecessary system-wide-oom-killer
Current mmtom has new oom function as pagefault_out_of_memory(). It's added for select bad process rathar than killing current. When memcg hit limit and calls OOM at page_fault, this handler called and system-wide-oom handling happens. (means kernel panics if panic_on_oom is true....) To avoid overkill, check memcg's recent behavior before starting system-wide-oom. And this patch also fixes to guarantee "don't accnout against process with TIF_MEMDIE". This is necessary for smooth OOM. [akpm@linux-foundation.org: build fix] Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Li Zefan <lizf@cn.fujitsu.com> Cc: Balbir Singh <balbir@in.ibm.com> Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Cc: Badari Pulavarty <pbadari@us.ibm.com> Cc: Jan Blunck <jblunck@suse.de> Cc: Hirokazu Takahashi <taka@valinux.co.jp> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/oom_kill.c')
-rw-r--r--mm/oom_kill.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index 6b9e758c98a5..fd150e3a2567 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -560,6 +560,13 @@ void pagefault_out_of_memory(void)
560 /* Got some memory back in the last second. */ 560 /* Got some memory back in the last second. */
561 return; 561 return;
562 562
563 /*
564 * If this is from memcg, oom-killer is already invoked.
565 * and not worth to go system-wide-oom.
566 */
567 if (mem_cgroup_oom_called(current))
568 goto rest_and_return;
569
563 if (sysctl_panic_on_oom) 570 if (sysctl_panic_on_oom)
564 panic("out of memory from page fault. panic_on_oom is selected.\n"); 571 panic("out of memory from page fault. panic_on_oom is selected.\n");
565 572
@@ -571,6 +578,7 @@ void pagefault_out_of_memory(void)
571 * Give "p" a good chance of killing itself before we 578 * Give "p" a good chance of killing itself before we
572 * retry to allocate memory. 579 * retry to allocate memory.
573 */ 580 */
581rest_and_return:
574 if (!test_thread_flag(TIF_MEMDIE)) 582 if (!test_thread_flag(TIF_MEMDIE))
575 schedule_timeout_uninterruptible(1); 583 schedule_timeout_uninterruptible(1);
576} 584}