Re: [PATCH -next 1/8] mm: memory_hotplug: add pfn_to_online_folio()

From: David Hildenbrand
Date: Tue Dec 13 2022 - 06:41:21 EST


On 13.12.22 10:27, Kefeng Wang wrote:
Introduce a wrapper function pfn_to_online_folio(), which calls
pfn_to_online_page() and returns the folio of the page found,
or null if no page.

Signed-off-by: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx>
---
include/linux/memory_hotplug.h | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
index 9fcbf5706595..e841e4fb52a7 100644
--- a/include/linux/memory_hotplug.h
+++ b/include/linux/memory_hotplug.h
@@ -265,6 +265,13 @@ static inline void pgdat_kswapd_unlock(pg_data_t *pgdat) {}
static inline void pgdat_kswapd_lock_init(pg_data_t *pgdat) {}
#endif /* ! CONFIG_MEMORY_HOTPLUG */
+static inline struct folio *pfn_to_online_folio(unsigned long pfn)
+{
+ struct page *page = pfn_to_online_page(pfn);
+
+ return page ? page_folio(page) : NULL;
+}

Who guarantees that page_folio() is safe and stable at that point?

IIRC, that's very tricky. We could have the page concurrently getting freed and the folio dissolved.

--
Thanks,

David / dhildenb