mm/rmap: Add folio_mkclean()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Sun, 28 Feb 2021 21:02:57 +0000 (16:02 -0500)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 18 Oct 2021 11:49:39 +0000 (07:49 -0400)
Transform page_mkclean() into folio_mkclean() and add a page_mkclean()
wrapper around folio_mkclean().

folio_mkclean is 15 bytes smaller than page_mkclean, but the kernel
is enlarged by 33 bytes due to inlining page_folio() into each caller.
This will go away once the callers are converted to use folio_mkclean().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Howells <dhowells@redhat.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
include/linux/rmap.h
mm/rmap.c

index c976cc6de2574786bb012ae1ae66554eaddd0772..e704b1a4c06c0945d19b088522c55ca6d5d2e7e1 100644 (file)
@@ -235,7 +235,7 @@ unsigned long page_address_in_vma(struct page *, struct vm_area_struct *);
  *
  * returns the number of cleaned PTEs.
  */
-int page_mkclean(struct page *);
+int folio_mkclean(struct folio *);
 
 /*
  * called in munlock()/munmap() path to check for other vmas holding
@@ -295,12 +295,14 @@ static inline void try_to_unmap(struct page *page, enum ttu_flags flags)
 {
 }
 
-static inline int page_mkclean(struct page *page)
+static inline int folio_mkclean(struct folio *folio)
 {
        return 0;
 }
-
-
 #endif /* CONFIG_MMU */
 
+static inline int page_mkclean(struct page *page)
+{
+       return folio_mkclean(page_folio(page));
+}
 #endif /* _LINUX_RMAP_H */
index 059556dbefec8e0aed8a1b3358af9e79527e68c3..3a1059c284c379156698be0ade1300793cf186d1 100644 (file)
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -981,7 +981,7 @@ static bool invalid_mkclean_vma(struct vm_area_struct *vma, void *arg)
        return true;
 }
 
-int page_mkclean(struct page *page)
+int folio_mkclean(struct folio *folio)
 {
        int cleaned = 0;
        struct address_space *mapping;
@@ -991,20 +991,20 @@ int page_mkclean(struct page *page)
                .invalid_vma = invalid_mkclean_vma,
        };
 
-       BUG_ON(!PageLocked(page));
+       BUG_ON(!folio_test_locked(folio));
 
-       if (!page_mapped(page))
+       if (!folio_mapped(folio))
                return 0;
 
-       mapping = page_mapping(page);
+       mapping = folio_mapping(folio);
        if (!mapping)
                return 0;
 
-       rmap_walk(page, &rwc);
+       rmap_walk(&folio->page, &rwc);
 
        return cleaned;
 }
-EXPORT_SYMBOL_GPL(page_mkclean);
+EXPORT_SYMBOL_GPL(folio_mkclean);
 
 /**
  * page_move_anon_rmap - move a page to our anon_vma