mm: add folio_get_nontail_page()
authorVishal Moola (Oracle) <vishal.moola@gmail.com>
Mon, 30 Jan 2023 21:43:49 +0000 (13:43 -0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 13 Feb 2023 23:54:31 +0000 (15:54 -0800)
Patch series "Convert a couple migrate functions to use folios", v2.

This patchset introduces folio_movable_ops() and converts 3 functions in
mm/migrate.c to use folios.  It also introduces folio_get_nontail_page()
for folio conversions which may want to distinguish between head and tail
pages.

This patch (of 4):

folio_get_nontail_page() returns the folio associated with a head page.
This is necessary for folio conversions where the behavior of that
function differs between head pages and tail pages.

Link: https://lkml.kernel.org/r/20230130214352.40538-1-vishal.moola@gmail.com
Link: https://lkml.kernel.org/r/20230130214352.40538-2-vishal.moola@gmail.com
Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Cc: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/mm.h

index 89c118ad4a446fd40c3604771d600363586e4a74..2992a2d55aee65f53e866c8e1042eb68bcb68be5 100644 (file)
@@ -892,6 +892,13 @@ static inline bool get_page_unless_zero(struct page *page)
        return page_ref_add_unless(page, 1, 0);
 }
 
+static inline struct folio *folio_get_nontail_page(struct page *page)
+{
+       if (unlikely(!get_page_unless_zero(page)))
+               return NULL;
+       return (struct folio *)page;
+}
+
 extern int page_is_ram(unsigned long pfn);
 
 enum {