[PATCH 3/5] Revert "Revert "mm, oom: protect !costly allocations some more for !CONFIG_COMPACTION""

Paolo Pisati paolo.pisati at canonical.com
Wed Aug 23 15:31:50 UTC 2017


BugLink: http://bugs.launchpad.net/bugs/1712598

This reverts commit 7b84469d8206394eace2ce2fc04417bb69b0f012.

Signed-off-by: Paolo Pisati <paolo.pisati at canonical.com>
---
 mm/page_alloc.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 7460e81..ebaf218 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2927,6 +2927,24 @@ should_compact_retry(struct alloc_context *ac, unsigned int order, int alloc_fla
 		     enum migrate_mode *migrate_mode,
 		     int compaction_retries)
 {
+	struct zone *zone;
+	struct zoneref *z;
+
+	if (!order || order > PAGE_ALLOC_COSTLY_ORDER)
+		return false;
+
+	/*
+	 * There are setups with compaction disabled which would prefer to loop
+	 * inside the allocator rather than hit the oom killer prematurely.
+	 * Let's give them a good hope and keep retrying while the order-0
+	 * watermarks are OK.
+	 */
+	for_each_zone_zonelist_nodemask(zone, z, ac->zonelist, ac->high_zoneidx,
+					ac->nodemask) {
+		if (zone_watermark_ok(zone, 0, min_wmark_pages(zone),
+					ac->classzone_idx, alloc_flags))
+			return true;
+	}
 	return false;
 }
 #endif /* CONFIG_COMPACTION */
-- 
2.7.4





More information about the kernel-team mailing list