return global_node_page_state(NR_SWAPCACHE);
 }
 
-extern void free_swap_cache(struct page *page);
-extern void free_page_and_swap_cache(struct page *);
-extern void free_pages_and_swap_cache(struct encoded_page **, int);
+void free_swap_cache(struct folio *folio);
+void free_page_and_swap_cache(struct page *);
+void free_pages_and_swap_cache(struct encoded_page **, int);
 /* linux/mm/swapfile.c */
 extern atomic_long_t nr_swap_pages;
 extern long total_swap_pages;
 /* used to sanity check ptes in zap_pte_range when CONFIG_SWAP=0 */
 #define free_swap_and_cache(e) is_pfn_swap_entry(e)
 
-static inline void free_swap_cache(struct page *page)
+static inline void free_swap_cache(struct folio *folio)
 {
 }
 
 
                node_stat_sub_folio(src, NR_ISOLATED_ANON +
                                folio_is_file_lru(src));
                folio_unlock(src);
-               free_swap_cache(&src->page);
+               free_swap_cache(src);
                folio_putback_lru(src);
        }
 }
 
                folio_put(new_folio);
        if (old_folio) {
                if (page_copied)
-                       free_swap_cache(&old_folio->page);
+                       free_swap_cache(old_folio);
                folio_put(old_folio);
        }
 
 
  * folio_free_swap() _with_ the lock.
  *                                     - Marcelo
  */
-void free_swap_cache(struct page *page)
+void free_swap_cache(struct folio *folio)
 {
-       struct folio *folio = page_folio(page);
-
        if (folio_test_swapcache(folio) && !folio_mapped(folio) &&
            folio_trylock(folio)) {
                folio_free_swap(folio);
  */
 void free_page_and_swap_cache(struct page *page)
 {
-       free_swap_cache(page);
+       struct folio *folio = page_folio(page);
+
+       free_swap_cache(folio);
        if (!is_huge_zero_page(page))
-               put_page(page);
+               folio_put(folio);
 }
 
 /*
        for (int i = 0; i < nr; i++) {
                struct folio *folio = page_folio(encoded_page_ptr(pages[i]));
 
-               free_swap_cache(&folio->page);
+               free_swap_cache(folio);
                refs[folios.nr] = 1;
                if (unlikely(encoded_page_flags(pages[i]) &
                             ENCODED_PAGE_BIT_NR_PAGES_NEXT))