With the full changelog. This can be either folded into the respective patch or applied on top. >From 0bd619e7a68337c97bdaed288e813e96a14ba339 Mon Sep 17 00:00:00 2001 From: Michal Hocko <mhocko@xxxxxxxx> Date: Tue, 29 May 2018 10:09:33 +0200 Subject: [PATCH] mm, memcg, oom: fix pre-mature allocation failures Tetsuo has noticed that "mm, oom: cgroup-aware OOM killer" can lead to a pre-mature allocation failure if the cgroup aware oom killer is enabled and select_victim_memcg doesn't pick up any memcg to kill because there is a memcg already being killed. oc->chosen_memcg will become INFLIGHT_VICTIM and oom_kill_memcg_victim will bail out early. oc->chosen_task will stay NULL, however, and out_of_memory will therefore return false which forces __alloc_pages_may_oom to not set did_some_progress and the page allocator backs out and fails the allocation. U Fix this by checking both chosen_task and chosen_memcg in out_of_memory and return false only when _both_ are NULL. Fixes: "mm, oom: cgroup-aware OOM killer" Reported-by: Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx> Signed-off-by: Michal Hocko <mhocko@xxxxxxxx> --- mm/oom_kill.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 565e7da55318..fc06af041447 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -1174,7 +1174,7 @@ bool out_of_memory(struct oom_control *oc) if (delay) schedule_timeout_killable(1); - return !!oc->chosen_task; + return !!(oc->chosen_task | oc->chosen_memcg); } /* -- 2.17.0 -- Michal Hocko SUSE Labs