Re: [PATCH] mm,oom: Don't call schedule_timeout_killable() with oom_lock held.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux