Skip to contentSkip to conversation

mm, memcg: add a helper function to check may oom condition

PATCH In review Qiang Huang 2 participants 2 messages Sep 10, 2013

Subsystems (5)
lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 mm, memcg: add a helper function to check may oom condition

Use helper function to check if we need to deal with oom condition.

v2:
Change the function name to oom_gfp_allowed() as suggested by David Rientjes.

---
 include/linux/oom.h | 5 +++++
 mm/memcontrol.c     | 9 +--------
 mm/page_alloc.c     | 2 +-
 3 files changed, 7 insertions(+), 9 deletions(-)
include/linux/oom.h +5 -0
index da60007..4cd6267 100644
@@ -82,6 +82,11 @@ static inline void oom_killer_enable(void)
 	oom_killer_disabled = false;
 }
 
+static inline bool oom_gfp_allowed(gfp_t gfp_mask)
+{
+	return (gfp_mask & __GFP_FS) && !(gfp_mask & __GFP_NORETRY);
+}
+
 extern struct task_struct *find_lock_task_mm(struct task_struct *p);
 
 /* sysctls */
mm/memcontrol.c +1 -8
index b73988a..392e668 100644
@@ -2910,21 +2910,14 @@ static int memcg_charge_kmem(struct mem_cgroup *memcg, gfp_t gfp, u64 size)
 	struct res_counter *fail_res;
 	struct mem_cgroup *_memcg;
 	int ret = 0;
-	bool may_oom;
 
 	ret = res_counter_charge(&memcg->kmem, size, &fail_res);
 	if (ret)
 		return ret;
 
-	/*
-	 * Conditions under which we can wait for the oom_killer. Those are
-	 * the same conditions tested by the core page allocator
-	 */
-	may_oom = (gfp & __GFP_FS) && !(gfp & __GFP_NORETRY);
-
 	_memcg = memcg;
 	ret = __mem_cgroup_try_charge(NULL, gfp, size >> PAGE_SHIFT,
-				      &_memcg, may_oom);
+				      &_memcg, oom_gfp_allowed(gfp));
 
 	if (ret == -EINTR)  {
 		/*
mm/page_alloc.c +1 -1
index b7c612d..079ee3d 100644
@@ -2589,7 +2589,7 @@ rebalance:
 	 * running out of options and have to consider going OOM
 	 */
 	if (!did_some_progress) {
-		if ((gfp_mask & __GFP_FS) && !(gfp_mask & __GFP_NORETRY)) {
+		if (oom_gfp_allowed(gfp_mask)) {
 			if (oom_killer_disabled)
 				goto nopage;
 			/* Coredumps can quickly deplete all memory reserves */
Signature · 1 line
1.8.3