diff mbox

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

Message ID 1503502312-24673-4-git-send-email-paolo.pisati@canonical.com
State New
Headers show

Commit Message

Paolo Pisati Aug. 23, 2017, 3:31 p.m. UTC
BugLink: http://bugs.launchpad.net/bugs/1712598

This reverts commit 7b84469d8206394eace2ce2fc04417bb69b0f012.

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

Patch

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 */