On 6/2/23 16:47, Johannes Weiner wrote: > On Mon, May 29, 2023 at 12:38:07PM -0400, Johannes Weiner wrote: >> On Mon, May 29, 2023 at 03:03:52PM +0200, Vlastimil Babka wrote: >> > I think you simplified this part too much, so now once it runs out of >> > retries, it will return false, while previously it would increase the priority. > > Here is the delta fix. If this looks good to everybody, can you please > fold this into the patch you have in tree? Thanks! > > --- > From 4b9429f9ef04fcb7bb5ffae0db8ea113b26d097b Mon Sep 17 00:00:00 2001 > From: Johannes Weiner <hannes@xxxxxxxxxxx> > Date: Fri, 2 Jun 2023 16:02:37 +0200 > Subject: [PATCH] mm: compaction: simplify should_compact_retry() fix > > 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> For the 2/5 +fix Acked-by: Vlastimil Babka <vbabka@xxxxxxx> > --- > 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; > + } > } > > /*