filemap: Convert page_cache_delete to take a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Sat, 8 May 2021 04:35:49 +0000 (00:35 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Tue, 4 Jan 2022 18:15:33 +0000 (13:15 -0500)
It was already assuming a head page, so this is a straightforward
conversion.  Convert the one caller to call page_folio(), even though
it must currently be passing in a head page.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: William Kucharski <william.kucharski@oracle.com>
mm/filemap.c

index 5dd3c6e39c9f90b518f2c86102b6afb87e51324e..38fb26e16b8595ed40fe81207701567de7fa53e8 100644 (file)
  */
 
 static void page_cache_delete(struct address_space *mapping,
-                                  struct page *page, void *shadow)
+                                  struct folio *folio, void *shadow)
 {
-       XA_STATE(xas, &mapping->i_pages, page->index);
-       unsigned int nr = 1;
+       XA_STATE(xas, &mapping->i_pages, folio->index);
+       long nr = 1;
 
        mapping_set_update(&xas, mapping);
 
        /* hugetlb pages are represented by a single entry in the xarray */
-       if (!PageHuge(page)) {
-               xas_set_order(&xas, page->index, compound_order(page));
-               nr = compound_nr(page);
+       if (!folio_test_hugetlb(folio)) {
+               xas_set_order(&xas, folio->index, folio_order(folio));
+               nr = folio_nr_pages(folio);
        }
 
-       VM_BUG_ON_PAGE(!PageLocked(page), page);
-       VM_BUG_ON_PAGE(PageTail(page), page);
-       VM_BUG_ON_PAGE(nr != 1 && shadow, page);
+       VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio);
+       VM_BUG_ON_FOLIO(nr != 1 && shadow, folio);
 
        xas_store(&xas, shadow);
        xas_init_marks(&xas);
 
-       page->mapping = NULL;
+       folio->mapping = NULL;
        /* Leave page->index set: truncation lookup relies upon it */
        mapping->nrpages -= nr;
 }
@@ -223,12 +222,13 @@ static void unaccount_page_cache_page(struct address_space *mapping,
  */
 void __delete_from_page_cache(struct page *page, void *shadow)
 {
+       struct folio *folio = page_folio(page);
        struct address_space *mapping = page->mapping;
 
        trace_mm_filemap_delete_from_page_cache(page);
 
        unaccount_page_cache_page(mapping, page);
-       page_cache_delete(mapping, page, shadow);
+       page_cache_delete(mapping, folio, shadow);
 }
 
 static void page_cache_free_page(struct address_space *mapping,