diff options
author | David Rientjes <rientjes@google.com> | 2012-07-31 19:43:48 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-31 21:42:45 -0400 |
commit | 876aafbfd9ba5bb352f1b14622c27f3fe9a99013 (patch) | |
tree | fdd18b6caa0c9baa56b76feb9b05339919f283dd /mm/oom_kill.c | |
parent | 6b0c81b3be114a93f79bd4c5639ade5107d77c21 (diff) |
mm, memcg: move all oom handling to memcontrol.c
By globally defining check_panic_on_oom(), the memcg oom handler can be
moved entirely to mm/memcontrol.c. This removes the ugly #ifdef in the
oom killer and cleans up the code.
Signed-off-by: David Rientjes <rientjes@google.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: Michal Hocko <mhocko@suse.cz>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
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.c | 23 |
1 files changed, 2 insertions, 21 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index a3a32ae02e9d..198600861638 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c | |||
@@ -556,8 +556,8 @@ void oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, | |||
556 | /* | 556 | /* |
557 | * Determines whether the kernel must panic because of the panic_on_oom sysctl. | 557 | * Determines whether the kernel must panic because of the panic_on_oom sysctl. |
558 | */ | 558 | */ |
559 | static void check_panic_on_oom(enum oom_constraint constraint, gfp_t gfp_mask, | 559 | void check_panic_on_oom(enum oom_constraint constraint, gfp_t gfp_mask, |
560 | int order, const nodemask_t *nodemask) | 560 | int order, const nodemask_t *nodemask) |
561 | { | 561 | { |
562 | if (likely(!sysctl_panic_on_oom)) | 562 | if (likely(!sysctl_panic_on_oom)) |
563 | return; | 563 | return; |
@@ -575,25 +575,6 @@ static void check_panic_on_oom(enum oom_constraint constraint, gfp_t gfp_mask, | |||
575 | sysctl_panic_on_oom == 2 ? "compulsory" : "system-wide"); | 575 | sysctl_panic_on_oom == 2 ? "compulsory" : "system-wide"); |
576 | } | 576 | } |
577 | 577 | ||
578 | #ifdef CONFIG_MEMCG | ||
579 | void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask, | ||
580 | int order) | ||
581 | { | ||
582 | /* | ||
583 | * If current has a pending SIGKILL, then automatically select it. The | ||
584 | * goal is to allow it to allocate so that it may quickly exit and free | ||
585 | * its memory. | ||
586 | */ | ||
587 | if (fatal_signal_pending(current)) { | ||
588 | set_thread_flag(TIF_MEMDIE); | ||
589 | return; | ||
590 | } | ||
591 | |||
592 | check_panic_on_oom(CONSTRAINT_MEMCG, gfp_mask, order, NULL); | ||
593 | __mem_cgroup_out_of_memory(memcg, gfp_mask, order); | ||
594 | } | ||
595 | #endif | ||
596 | |||
597 | static BLOCKING_NOTIFIER_HEAD(oom_notify_list); | 578 | static BLOCKING_NOTIFIER_HEAD(oom_notify_list); |
598 | 579 | ||
599 | int register_oom_notifier(struct notifier_block *nb) | 580 | int register_oom_notifier(struct notifier_block *nb) |