From 4f903761197f2f44488b7c86566e5d3cc4a639de Mon Sep 17 00:00:00 2001 From: David Rientjes Date: Thu, 12 Jan 2012 17:18:52 -0800 Subject: [PATCH] --- yaml --- r: 284384 b: refs/heads/master c: de077d222d5ca6108cab119a09593344c12100ab h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/memcontrol.c | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 5596d6a6f368..5d98e33f8e54 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c3cecc683446ad54ca587d7123bd3ce94bd7b8e1 +refs/heads/master: de077d222d5ca6108cab119a09593344c12100ab diff --git a/trunk/mm/memcontrol.c b/trunk/mm/memcontrol.c index 2a1f7847b6ad..7bc30707d0c6 100644 --- a/trunk/mm/memcontrol.c +++ b/trunk/mm/memcontrol.c @@ -1238,10 +1238,21 @@ int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *memcg) struct task_struct *p; p = find_lock_task_mm(task); - if (!p) - return 0; - curr = try_get_mem_cgroup_from_mm(p->mm); - task_unlock(p); + if (p) { + curr = try_get_mem_cgroup_from_mm(p->mm); + task_unlock(p); + } else { + /* + * All threads may have already detached their mm's, but the oom + * killer still needs to detect if they have already been oom + * killed to prevent needlessly killing additional tasks. + */ + task_lock(task); + curr = mem_cgroup_from_task(task); + if (curr) + css_get(&curr->css); + task_unlock(task); + } if (!curr) return 0; /*