OSDN Git Service

mm/swap: convert delete_from_swap_cache() to take a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 17 Jun 2022 17:50:19 +0000 (18:50 +0100)
committerakpm <akpm@linux-foundation.org>
Mon, 4 Jul 2022 01:08:48 +0000 (18:08 -0700)
All but one caller already has a folio, so convert it to use a folio.

Link: https://lkml.kernel.org/r/20220617175020.717127-22-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/memory-failure.c
mm/shmem.c
mm/swap.h
mm/swap_state.c
mm/swapfile.c

index 845369f..f7612cc 100644 (file)
@@ -1007,12 +1007,13 @@ static int me_swapcache_dirty(struct page_state *ps, struct page *p)
 
 static int me_swapcache_clean(struct page_state *ps, struct page *p)
 {
+       struct folio *folio = page_folio(p);
        int ret;
 
-       delete_from_swap_cache(p);
+       delete_from_swap_cache(folio);
 
        ret = delete_from_lru_cache(p) ? MF_FAILED : MF_RECOVERED;
-       unlock_page(p);
+       folio_unlock(folio);
 
        if (has_extra_refcount(ps, p, false))
                ret = MF_FAILED;
index 12d45a0..12ac67d 100644 (file)
@@ -1691,7 +1691,7 @@ static void shmem_set_folio_swapin_error(struct inode *inode, pgoff_t index,
                return;
 
        folio_wait_writeback(folio);
-       delete_from_swap_cache(&folio->page);
+       delete_from_swap_cache(folio);
        spin_lock_irq(&info->lock);
        /*
         * Don't treat swapin error folio as alloced. Otherwise inode->i_blocks won't
@@ -1789,7 +1789,7 @@ static int shmem_swapin_folio(struct inode *inode, pgoff_t index,
        if (sgp == SGP_WRITE)
                folio_mark_accessed(folio);
 
-       delete_from_swap_cache(&folio->page);
+       delete_from_swap_cache(folio);
        folio_mark_dirty(folio);
        swap_free(swap);
 
index 8545311..3684f7f 100644 (file)
--- a/mm/swap.h
+++ b/mm/swap.h
@@ -38,7 +38,7 @@ int add_to_swap_cache(struct page *page, swp_entry_t entry,
                      gfp_t gfp, void **shadowp);
 void __delete_from_swap_cache(struct page *page,
                              swp_entry_t entry, void *shadow);
-void delete_from_swap_cache(struct page *page);
+void delete_from_swap_cache(struct folio *folio);
 void clear_shadow_from_swap_cache(int type, unsigned long begin,
                                  unsigned long end);
 void free_swap_cache(struct page *page);
@@ -140,7 +140,7 @@ static inline void __delete_from_swap_cache(struct page *page,
 {
 }
 
-static inline void delete_from_swap_cache(struct page *page)
+static inline void delete_from_swap_cache(struct folio *folio)
 {
 }
 
index f656876..06a08e6 100644 (file)
@@ -222,22 +222,22 @@ fail:
 }
 
 /*
- * This must be called only on pages that have
+ * This must be called only on folios that have
  * been verified to be in the swap cache and locked.
- * It will never put the page into the free list,
- * the caller has a reference on the page.
+ * It will never put the folio into the free list,
+ * the caller has a reference on the folio.
  */
-void delete_from_swap_cache(struct page *page)
+void delete_from_swap_cache(struct folio *folio)
 {
-       swp_entry_t entry = { .val = page_private(page) };
+       swp_entry_t entry = folio_swap_entry(folio);
        struct address_space *address_space = swap_address_space(entry);
 
        xa_lock_irq(&address_space->i_pages);
-       __delete_from_swap_cache(page, entry, NULL);
+       __delete_from_swap_cache(&folio->page, entry, NULL);
        xa_unlock_irq(&address_space->i_pages);
 
-       put_swap_page(page, entry);
-       page_ref_sub(page, thp_nr_pages(page));
+       put_swap_page(&folio->page, entry);
+       folio_ref_sub(folio, folio_nr_pages(folio));
 }
 
 void clear_shadow_from_swap_cache(int type, unsigned long begin,
index af6e839..1fdccd2 100644 (file)
@@ -1617,7 +1617,7 @@ int try_to_free_swap(struct page *page)
        if (pm_suspended_storage())
                return 0;
 
-       delete_from_swap_cache(&folio->page);
+       delete_from_swap_cache(folio);
        folio_set_dirty(folio);
        return 1;
 }