linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 5/5] Revert "mm/migrate: __unmap_and_move() push good newpage to LRU"
@ 2023-06-18  6:58 Yosry Ahmed
  2023-06-19  1:57 ` Huang, Ying
  0 siblings, 1 reply; 8+ messages in thread
From: Yosry Ahmed @ 2023-06-18  6:58 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Yu Zhao, Jan Alexander Steffens (heftig),
	Steven Barrett, Brian Geffon, T.J. Alumbaugh, Gaosheng Cui,
	Suren Baghdasaryan, Matthew Wilcox (Oracle),
	Liam R. Howlett, David Hildenbrand, Jason Gunthorpe,
	Mathieu Desnoyers, David Howells, Hugh Dickins, Greg Thelen,
	linux-mm, linux-kernel, Yosry Ahmed

This reverts commit c3096e6782b733158bf34f6bbb4567808d4e0740.

That commit made sure we immediately add the new page to the LRU before
remove_migration_ptes() is called in migrate_move_folio() (used to be
__unmap_and_move() back then), such that the rmap walk will rebuild the
correct mlock_count for the page again. This was needed because the
mlock_count was lost when the page is isolated. This is no longer the
case since mlock_count no longer overlays page->lru.

Revert the commit (the code was foliated afterward the commit, so the
revert is updated as such).

Signed-off-by: Yosry Ahmed <yosryahmed@google.com>
---
 mm/migrate.c | 24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)

diff --git a/mm/migrate.c b/mm/migrate.c
index 01cac26a3127..68f693731865 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1279,19 +1279,6 @@ static int migrate_folio_move(free_page_t put_new_page, unsigned long private,
 	if (unlikely(!is_lru))
 		goto out_unlock_both;
 
-	/*
-	 * When successful, push dst to LRU immediately: so that if it
-	 * turns out to be an mlocked page, remove_migration_ptes() will
-	 * automatically build up the correct dst->mlock_count for it.
-	 *
-	 * We would like to do something similar for the old page, when
-	 * unsuccessful, and other cases when a page has been temporarily
-	 * isolated from the unevictable LRU: but this case is the easiest.
-	 */
-	folio_add_lru(dst);
-	if (page_was_mapped)
-		lru_add_drain();
-
 	if (page_was_mapped)
 		remove_migration_ptes(src, dst, false);
 
@@ -1301,9 +1288,16 @@ static int migrate_folio_move(free_page_t put_new_page, unsigned long private,
 	/*
 	 * If migration is successful, decrease refcount of dst,
 	 * which will not free the page because new page owner increased
-	 * refcounter.
+	 * refcounter. As well, if it is LRU folio, add the folio to LRU
+	 * list in here. Use the old state of the isolated source folio to
+	 * determine if we migrated a LRU folio. dst was already unlocked
+	 * and possibly modified by its owner - don't rely on the folio
+	 * state.
 	 */
-	folio_put(dst);
+	if (unlikely(!is_lru))
+		folio_put(dst);
+	else
+		folio_putback_lru(dst);
 
 	/*
 	 * A folio that has been migrated has all references removed
-- 
2.41.0.162.gfafddb0af9-goog



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-06-20 17:10 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-18  6:58 [RFC PATCH 5/5] Revert "mm/migrate: __unmap_and_move() push good newpage to LRU" Yosry Ahmed
2023-06-19  1:57 ` Huang, Ying
2023-06-19  3:59   ` Yosry Ahmed
2023-06-19  4:27     ` Huang, Ying
2023-06-19  4:34       ` Yosry Ahmed
2023-06-19  7:56     ` David Hildenbrand
2023-06-19  7:58       ` David Hildenbrand
2023-06-20 17:09         ` Yosry Ahmed

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox