void page_writeback_init(void);
 
+static inline void *folio_raw_mapping(struct folio *folio)
+{
+       unsigned long mapping = (unsigned long)folio->mapping;
+
+       return (void *)(mapping & ~PAGE_MAPPING_FLAGS);
+}
+
 vm_fault_t do_swap_page(struct vm_fault *vmf);
 void folio_rotate_reclaimable(struct folio *folio);
 
 
 }
 EXPORT_SYMBOL(kvrealloc);
 
-static inline void *__page_rmapping(struct page *page)
-{
-       unsigned long mapping;
-
-       mapping = (unsigned long)page->mapping;
-       mapping &= ~PAGE_MAPPING_FLAGS;
-
-       return (void *)mapping;
-}
-
 /* Neutral page->mapping pointer to address_space or anon_vma or other */
 void *page_rmapping(struct page *page)
 {
-       page = compound_head(page);
-       return __page_rmapping(page);
+       return folio_raw_mapping(page_folio(page));
 }
 
 /**
 
 struct anon_vma *page_anon_vma(struct page *page)
 {
-       unsigned long mapping;
+       struct folio *folio = page_folio(page);
+       unsigned long mapping = (unsigned long)folio->mapping;
 
-       page = compound_head(page);
-       mapping = (unsigned long)page->mapping;
        if ((mapping & PAGE_MAPPING_FLAGS) != PAGE_MAPPING_ANON)
                return NULL;
-       return __page_rmapping(page);
+       return (void *)(mapping - PAGE_MAPPING_ANON);
 }
 
 /**