From a80e0d1e1eb1d161f562ef01fcd744ff4d4a4721 Mon Sep 17 00:00:00 2001 From: David Rientjes Date: Thu, 7 Feb 2008 00:14:06 -0800 Subject: [PATCH] --- yaml --- r: 83773 b: refs/heads/master c: 4c4a22148909e4c003562ea7ffe0a06e26919e3c h: refs/heads/master i: 83771: af6f2c3e28f594847e86b87a018103ee1fb48cf3 v: v3 --- [refs] | 2 +- trunk/include/linux/memcontrol.h | 7 +++++++ trunk/mm/memcontrol.c | 10 ++++++++++ trunk/mm/oom_kill.c | 9 ++------- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 0336c117419d..b4feaa2fc85b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4c6bc8dd5a0932f2c0b30a5f0a124464b7f614d0 +refs/heads/master: 4c4a22148909e4c003562ea7ffe0a06e26919e3c diff --git a/trunk/include/linux/memcontrol.h b/trunk/include/linux/memcontrol.h index 4f580268b1b7..42536c737d9c 100644 --- a/trunk/include/linux/memcontrol.h +++ b/trunk/include/linux/memcontrol.h @@ -48,6 +48,7 @@ extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, gfp_t gfp_mask); +int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); static inline struct mem_cgroup *mm_cgroup(const struct mm_struct *mm) { @@ -110,6 +111,12 @@ static inline struct mem_cgroup *mm_cgroup(const struct mm_struct *mm) return NULL; } +static inline int task_in_mem_cgroup(struct task_struct *task, + const struct mem_cgroup *mem) +{ + return 1; +} + #endif /* CONFIG_CGROUP_MEM_CONT */ #endif /* _LINUX_MEMCONTROL_H */ diff --git a/trunk/mm/memcontrol.c b/trunk/mm/memcontrol.c index f6cdbf755ed3..2fadd4896a14 100644 --- a/trunk/mm/memcontrol.c +++ b/trunk/mm/memcontrol.c @@ -170,6 +170,16 @@ static void __mem_cgroup_move_lists(struct page_cgroup *pc, bool active) list_move(&pc->lru, &pc->mem_cgroup->inactive_list); } +int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem) +{ + int ret; + + task_lock(task); + ret = task->mm && mm_cgroup(task->mm) == mem; + task_unlock(task); + return ret; +} + /* * This routine assumes that the appropriate zone's lru lock is already held */ diff --git a/trunk/mm/oom_kill.c b/trunk/mm/oom_kill.c index 64751dc9d997..ef5084dbc793 100644 --- a/trunk/mm/oom_kill.c +++ b/trunk/mm/oom_kill.c @@ -65,13 +65,6 @@ unsigned long badness(struct task_struct *p, unsigned long uptime, return 0; } -#ifdef CONFIG_CGROUP_MEM_CONT - if (mem != NULL && mm->mem_cgroup != mem) { - task_unlock(p); - return 0; - } -#endif - /* * The memory size of the process is the basis for the badness. */ @@ -223,6 +216,8 @@ static struct task_struct *select_bad_process(unsigned long *ppoints, /* skip the init task */ if (is_global_init(p)) continue; + if (mem && !task_in_mem_cgroup(p, mem)) + continue; /* * This task already has access to memory reserves and is