[SRU][N][PATCH 1/3] UBUNTU: SAUCE: Revert "mm/migrate_device: don't add folio to be freed to LRU in migrate_device_finalize()"

Matthew Ruffell matthew.ruffell at canonical.com
Tue Aug 12 07:38:15 UTC 2025


BugLink: https://bugs.launchpad.net/bugs/2120330

This reverts commit 3858edb1146374f3240d1ec769ba857186531b17 (ubuntu-noble).

An incorrect backport was performed, causing the old page to be placed
back instead of the new page, e.g.:

                src = page_folio(page);
                dst = page_folio(newpage);
+               if (!is_zone_device_page(page))
+                       putback_lru_page(page);

when in 41cddf83d8b00f29fd105e7a0777366edc69a5cf we have:

+               if (!folio_is_zone_device(dst))
+                       folio_add_lru(dst);

in which case, we should really have had the backport as:

+               if (!folio_is_zone_device(newpage))
+                       folio_add_lru(newpage);

Revert and fix this in an upcoming patch.

Signed-off-by: Matthew Ruffell <matthew.ruffell at canonical.com>
---
 mm/migrate_device.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/mm/migrate_device.c b/mm/migrate_device.c
index fae29eb0b012..b6c27c76e1a0 100644
--- a/mm/migrate_device.c
+++ b/mm/migrate_device.c
@@ -840,15 +840,20 @@ void migrate_device_finalize(unsigned long *src_pfns,
 
 		src = page_folio(page);
 		dst = page_folio(newpage);
-		if (!is_zone_device_page(page))
-			putback_lru_page(page);
 		remove_migration_ptes(src, dst, false);
 		folio_unlock(src);
-		put_page(page);
+
+		if (is_zone_device_page(page))
+			put_page(page);
+		else
+			putback_lru_page(page);
 
 		if (newpage != page) {
 			unlock_page(newpage);
-			put_page(newpage);
+			if (is_zone_device_page(newpage))
+				put_page(newpage);
+			else
+				putback_lru_page(newpage);
 		}
 	}
 }
-- 
2.50.0




More information about the kernel-team mailing list