[PATCH] mm: compaction: simplify should_compact_retry() fix

From: Johannes Weiner
Date: Fri Jun 02 2023 - 10:02:37 EST


Vlastimil points out an unintended change. Previously when hitting
max_retries we'd bump the priority level and restart the loop. Now we
bail out and fail instead. Restore the original behavior.

Signed-off-by: Johannes Weiner <hannes@xxxxxxxxxxx>
---
mm/page_alloc.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 72660e924b95..e7d7db36582b 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3768,6 +3768,15 @@ should_compact_retry(struct alloc_context *ac, int order, int alloc_flags,
if (fatal_signal_pending(current))
return false;

+ /*
+ * Compaction was skipped due to a lack of free order-0
+ * migration targets. Continue if reclaim can help.
+ */
+ if (compact_result == COMPACT_SKIPPED) {
+ ret = compaction_zonelist_suitable(ac, order, alloc_flags);
+ goto out;
+ }
+
/*
* Compaction managed to coalesce some page blocks, but the
* allocation failed presumably due to a race. Retry some.
@@ -3785,17 +3794,10 @@ should_compact_retry(struct alloc_context *ac, int order, int alloc_flags,
if (order > PAGE_ALLOC_COSTLY_ORDER)
max_retries /= 4;

- ret = ++(*compaction_retries) <= max_retries;
- goto out;
- }
-
- /*
- * Compaction was skipped due to a lack of free order-0
- * migration targets. Continue if reclaim can help.
- */
- if (compact_result == COMPACT_SKIPPED) {
- ret = compaction_zonelist_suitable(ac, order, alloc_flags);
- goto out;
+ if (++(*compaction_retries) <= max_retries) {
+ ret = true;
+ goto out;
+ }
}

/*
--
2.40.1