All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wonhyuk Yang <vvghjk1234@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Mel Gorman <mgorman@techsingularity.net>,
	Vlastimil Babka <Vbabka@suse.cz>,
	linux-mm@kvack.org, Wonhyuk Yang <vvghjk1234@gmail.com>
Subject: [PATCH] mm/compactoin: Fix edge case of fast_find_migrateblock()
Date: Sun, 24 Jan 2021 00:43:20 +0900	[thread overview]
Message-ID: <20210123154320.24278-1-vvghjk1234@gmail.com> (raw)

In the fast_find_migrateblock(), It iterate freelist to find
proper pageblock. But there are two edge cases. First, if the page
we found is equal to cc->migrate_pfn, it is considered that we
didn't found suitable pageblock. Second, if the loop was terminated
because order is less than PAGE_ALLOC_COSTLY_ORDER, it could
be considered that we found suitable one.

Fixes: 70b44595eafe9 ("mm, compaction: use free lists to quickly locate
a migration source")

Signed-off-by: Wonhyuk Yang <vvghjk1234@gmail.com>
---
 mm/compaction.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/mm/compaction.c b/mm/compaction.c
index e5acb9714436..46f49e6b7d1a 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -1742,8 +1742,8 @@ static unsigned long fast_find_migrateblock(struct compact_control *cc)
 		distance >>= 2;
 	high_pfn = pageblock_start_pfn(cc->migrate_pfn + distance);
 
-	for (order = cc->order - 1;
-	     order >= PAGE_ALLOC_COSTLY_ORDER && pfn == cc->migrate_pfn && nr_scanned < limit;
+	for (order = cc->order - 1, pfn = high_pfn;
+	     order >= PAGE_ALLOC_COSTLY_ORDER && pfn == high_pfn && nr_scanned < limit;
 	     order--) {
 		struct free_area *area = &cc->zone->free_area[order];
 		struct list_head *freelist;
@@ -1785,7 +1785,6 @@ static unsigned long fast_find_migrateblock(struct compact_control *cc)
 			}
 
 			if (nr_scanned >= limit) {
-				cc->fast_search_fail++;
 				move_freelist_tail(freelist, freepage);
 				break;
 			}
@@ -1799,9 +1798,10 @@ static unsigned long fast_find_migrateblock(struct compact_control *cc)
 	 * If fast scanning failed then use a cached entry for a page block
 	 * that had free pages as the basis for starting a linear scan.
 	 */
-	if (pfn == cc->migrate_pfn)
+	if (pfn == high_pfn) {
+		cc->fast_search_fail++;
 		pfn = reinit_migrate_pfn(cc);
-
+	}
 	return pfn;
 }
 
-- 
2.25.1



             reply	other threads:[~2021-01-23 15:43 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-23 15:43 Wonhyuk Yang [this message]
2021-01-25 16:49 ` [PATCH] mm/compactoin: Fix edge case of fast_find_migrateblock() Vlastimil Babka
2021-01-26 14:37   ` Wonhyuk Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210123154320.24278-1-vvghjk1234@gmail.com \
    --to=vvghjk1234@gmail.com \
    --cc=Vbabka@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@techsingularity.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.