shmem: Convert part of shmem_undo_range() to use a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 3 Dec 2021 13:50:01 +0000 (08:50 -0500)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Sat, 8 Jan 2022 05:28:41 +0000 (00:28 -0500)
find_lock_entries() never returns tail pages.  We cannot use page_folio()
here as the pagevec may also contain swap entries, so simply cast for
now.  This is an intermediate step which will be fully removed by the
end of this series.

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/shmem.c

index 18f93c2d68f16e76fb244c12bca5aa0aba6125c6..40da9075374b5133fc505253f9605dd5c8dc812e 100644 (file)
@@ -936,22 +936,22 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend,
        while (index < end && find_lock_entries(mapping, index, end - 1,
                        &pvec, indices)) {
                for (i = 0; i < pagevec_count(&pvec); i++) {
-                       struct page *page = pvec.pages[i];
+                       struct folio *folio = (struct folio *)pvec.pages[i];
 
                        index = indices[i];
 
-                       if (xa_is_value(page)) {
+                       if (xa_is_value(folio)) {
                                if (unfalloc)
                                        continue;
                                nr_swaps_freed += !shmem_free_swap(mapping,
-                                                               index, page);
+                                                               index, folio);
                                continue;
                        }
-                       index += thp_nr_pages(page) - 1;
+                       index += folio_nr_pages(folio) - 1;
 
-                       if (!unfalloc || !PageUptodate(page))
-                               truncate_inode_page(mapping, page);
-                       unlock_page(page);
+                       if (!unfalloc || !folio_test_uptodate(folio))
+                               truncate_inode_page(mapping, &folio->page);
+                       folio_unlock(folio);
                }
                pagevec_remove_exceptionals(&pvec);
                pagevec_release(&pvec);