On 16.01.25 07:16, Wupeng Ma wrote:
From: Ma Wupeng <mawupeng1@xxxxxxxxxx>
If a folio has an increased reference count, folio_try_get() will acquire
it, perform necessary operations, and then release it. In the case of a
poisoned folio without an elevated reference count (which is unlikely for
memory-failure), folio_try_get() will simply bypass it.
Therefore, relocate the folio_try_get() function, responsible for checking
and acquiring this reference count at first.
Signed-off-by: Ma Wupeng <mawupeng1@xxxxxxxxxx>
---
mm/memory_hotplug.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 2815bd4ea483..3fb75ee185c6 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -1786,6 +1786,9 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
page = pfn_to_page(pfn);
folio = page_folio(page);
+ if (!folio_try_get(folio))
+ continue;
+
I would only move it in front of the folio_test_hwpoison() check for
now. Note that with this patch as is the comment below would be wrong
/*
* No reference or lock is held on the folio, so it might
^
I would move this patch before the current #2, so the folio_lock() looks
less weird.
--
Cheers,
David / dhildenb