fs: Convert mpage_readpage to mpage_read_folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 29 Apr 2022 15:47:39 +0000 (11:47 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 9 May 2022 20:21:44 +0000 (16:21 -0400)
mpage_readpage still works in terms of pages, and has not been audited
for correctness with large folios, so include an assertion that the
filesystem is not passing it large folios.  Convert all the filesystems
to call mpage_read_folio() instead of mpage_readpage().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
14 files changed:
fs/exfat/inode.c
fs/ext2/inode.c
fs/fat/inode.c
fs/gfs2/aops.c
fs/hpfs/file.c
fs/iomap/buffered-io.c
fs/isofs/inode.c
fs/jfs/inode.c
fs/mpage.c
fs/nilfs2/inode.c
fs/ntfs3/inode.c
fs/qnx6/inode.c
fs/udf/inode.c
include/linux/mpage.h

index b9f63113db2d64e01a677dd962e131187f98be1f..0133d385d8e8904133a7b25491fadf9bcd4d876f 100644 (file)
@@ -357,9 +357,9 @@ unlock_ret:
        return err;
 }
 
-static int exfat_readpage(struct file *file, struct page *page)
+static int exfat_read_folio(struct file *file, struct folio *folio)
 {
-       return mpage_readpage(page, exfat_get_block);
+       return mpage_read_folio(folio, exfat_get_block);
 }
 
 static void exfat_readahead(struct readahead_control *rac)
@@ -492,7 +492,7 @@ int exfat_block_truncate_page(struct inode *inode, loff_t from)
 static const struct address_space_operations exfat_aops = {
        .dirty_folio    = block_dirty_folio,
        .invalidate_folio = block_invalidate_folio,
-       .readpage       = exfat_readpage,
+       .read_folio     = exfat_read_folio,
        .readahead      = exfat_readahead,
        .writepage      = exfat_writepage,
        .writepages     = exfat_writepages,
index d8ca8050945aa2dd48ca66b5698f9a2d1495a01c..9e1ecd89f47fa6aa141649cd08567afc28ac8b3b 100644 (file)
@@ -875,9 +875,9 @@ static int ext2_writepage(struct page *page, struct writeback_control *wbc)
        return block_write_full_page(page, ext2_get_block, wbc);
 }
 
-static int ext2_readpage(struct file *file, struct page *page)
+static int ext2_read_folio(struct file *file, struct folio *folio)
 {
-       return mpage_readpage(page, ext2_get_block);
+       return mpage_read_folio(folio, ext2_get_block);
 }
 
 static void ext2_readahead(struct readahead_control *rac)
@@ -966,7 +966,7 @@ ext2_dax_writepages(struct address_space *mapping, struct writeback_control *wbc
 const struct address_space_operations ext2_aops = {
        .dirty_folio            = block_dirty_folio,
        .invalidate_folio       = block_invalidate_folio,
-       .readpage               = ext2_readpage,
+       .read_folio             = ext2_read_folio,
        .readahead              = ext2_readahead,
        .writepage              = ext2_writepage,
        .write_begin            = ext2_write_begin,
@@ -982,7 +982,7 @@ const struct address_space_operations ext2_aops = {
 const struct address_space_operations ext2_nobh_aops = {
        .dirty_folio            = block_dirty_folio,
        .invalidate_folio       = block_invalidate_folio,
-       .readpage               = ext2_readpage,
+       .read_folio             = ext2_read_folio,
        .readahead              = ext2_readahead,
        .writepage              = ext2_nobh_writepage,
        .write_begin            = ext2_nobh_write_begin,
index 1f15b0fd1bb0cc62710a57c1d9e31296a419cf8e..8a81017f8d60155e2167e94d37373fc7585f5ade 100644 (file)
@@ -205,9 +205,9 @@ static int fat_writepages(struct address_space *mapping,
        return mpage_writepages(mapping, wbc, fat_get_block);
 }
 
-static int fat_readpage(struct file *file, struct page *page)
+static int fat_read_folio(struct file *file, struct folio *folio)
 {
-       return mpage_readpage(page, fat_get_block);
+       return mpage_read_folio(folio, fat_get_block);
 }
 
 static void fat_readahead(struct readahead_control *rac)
@@ -344,7 +344,7 @@ int fat_block_truncate_page(struct inode *inode, loff_t from)
 static const struct address_space_operations fat_aops = {
        .dirty_folio    = block_dirty_folio,
        .invalidate_folio = block_invalidate_folio,
-       .readpage       = fat_readpage,
+       .read_folio     = fat_read_folio,
        .readahead      = fat_readahead,
        .writepage      = fat_writepage,
        .writepages     = fat_writepages,
index a29eb1e5bfe28ddd8a487e0d74961ff32df62bdf..340bf5d0e8352a60840d97abfb5fde2cb0cb6f0a 100644 (file)
@@ -480,7 +480,7 @@ static int __gfs2_readpage(void *file, struct page *page)
                error = stuffed_readpage(ip, page);
                unlock_page(page);
        } else {
-               error = mpage_readpage(page, gfs2_block_map);
+               error = mpage_read_folio(folio, gfs2_block_map);
        }
 
        if (unlikely(gfs2_withdrawn(sdp)))
@@ -490,14 +490,13 @@ static int __gfs2_readpage(void *file, struct page *page)
 }
 
 /**
- * gfs2_readpage - read a page of a file
+ * gfs2_read_folio - read a folio from a file
  * @file: The file to read
- * @page: The page of the file
+ * @folio: The folio in the file
  */
-
-static int gfs2_readpage(struct file *file, struct page *page)
+static int gfs2_read_folio(struct file *file, struct folio *folio)
 {
-       return __gfs2_readpage(file, page);
+       return __gfs2_readpage(file, &folio->page);
 }
 
 /**
@@ -773,7 +772,7 @@ cannot_release:
 static const struct address_space_operations gfs2_aops = {
        .writepage = gfs2_writepage,
        .writepages = gfs2_writepages,
-       .readpage = gfs2_readpage,
+       .read_folio = gfs2_read_folio,
        .readahead = gfs2_readahead,
        .dirty_folio = filemap_dirty_folio,
        .releasepage = iomap_releasepage,
@@ -788,7 +787,7 @@ static const struct address_space_operations gfs2_aops = {
 static const struct address_space_operations gfs2_jdata_aops = {
        .writepage = gfs2_jdata_writepage,
        .writepages = gfs2_jdata_writepages,
-       .readpage = gfs2_readpage,
+       .read_folio = gfs2_read_folio,
        .readahead = gfs2_readahead,
        .dirty_folio = jdata_dirty_folio,
        .bmap = gfs2_bmap,
index 8b590b3826c38e29ac878cf74db2cbad2692bdcd..f7547a62c81f6aa4cc35d2205d710131feb8eb8f 100644 (file)
@@ -158,9 +158,9 @@ static const struct iomap_ops hpfs_iomap_ops = {
        .iomap_begin            = hpfs_iomap_begin,
 };
 
-static int hpfs_readpage(struct file *file, struct page *page)
+static int hpfs_read_folio(struct file *file, struct folio *folio)
 {
-       return mpage_readpage(page, hpfs_get_block);
+       return mpage_read_folio(folio, hpfs_get_block);
 }
 
 static int hpfs_writepage(struct page *page, struct writeback_control *wbc)
@@ -247,7 +247,7 @@ static int hpfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 const struct address_space_operations hpfs_aops = {
        .dirty_folio    = block_dirty_folio,
        .invalidate_folio = block_invalidate_folio,
-       .readpage = hpfs_readpage,
+       .read_folio = hpfs_read_folio,
        .writepage = hpfs_writepage,
        .readahead = hpfs_readahead,
        .writepages = hpfs_writepages,
index 75eb0c27a0e83a4dd8fdf18dcdc8b77200965932..2de087ac87b661c502890032f74616de4ad08654 100644 (file)
@@ -297,7 +297,7 @@ static loff_t iomap_readpage_iter(const struct iomap_iter *iter,
                /*
                 * If the bio_alloc fails, try it again for a single page to
                 * avoid having to deal with partial page reads.  This emulates
-                * what do_mpage_readpage does.
+                * what do_mpage_read_folio does.
                 */
                if (!ctx->bio) {
                        ctx->bio = bio_alloc(iomap->bdev, 1, REQ_OP_READ,
index d7491692aea3f412ca3a78f3f0ddabc07420e8ba..88bf2030346603cb978a3cec49e72a210ada1996 100644 (file)
@@ -1174,9 +1174,9 @@ struct buffer_head *isofs_bread(struct inode *inode, sector_t block)
        return sb_bread(inode->i_sb, blknr);
 }
 
-static int isofs_readpage(struct file *file, struct page *page)
+static int isofs_read_folio(struct file *file, struct folio *folio)
 {
-       return mpage_readpage(page, isofs_get_block);
+       return mpage_read_folio(folio, isofs_get_block);
 }
 
 static void isofs_readahead(struct readahead_control *rac)
@@ -1190,7 +1190,7 @@ static sector_t _isofs_bmap(struct address_space *mapping, sector_t block)
 }
 
 static const struct address_space_operations isofs_aops = {
-       .readpage = isofs_readpage,
+       .read_folio = isofs_read_folio,
        .readahead = isofs_readahead,
        .bmap = _isofs_bmap
 };
index aa9f112107b2056d33e5d99416ddc194120c5561..a5dd7e53754a87b086024f0b2407ffa6f937537c 100644 (file)
@@ -293,9 +293,9 @@ static int jfs_writepages(struct address_space *mapping,
        return mpage_writepages(mapping, wbc, jfs_get_block);
 }
 
-static int jfs_readpage(struct file *file, struct page *page)
+static int jfs_read_folio(struct file *file, struct folio *folio)
 {
-       return mpage_readpage(page, jfs_get_block);
+       return mpage_read_folio(folio, jfs_get_block);
 }
 
 static void jfs_readahead(struct readahead_control *rac)
@@ -359,7 +359,7 @@ static ssize_t jfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 const struct address_space_operations jfs_aops = {
        .dirty_folio    = block_dirty_folio,
        .invalidate_folio = block_invalidate_folio,
-       .readpage       = jfs_readpage,
+       .read_folio     = jfs_read_folio,
        .readahead      = jfs_readahead,
        .writepage      = jfs_writepage,
        .writepages     = jfs_writepages,
index a04439b84ae26582424dcbe729d7122117a03854..6df9c3aa5728b68442bd34a657aac08ff024ce6c 100644 (file)
@@ -364,20 +364,22 @@ EXPORT_SYMBOL(mpage_readahead);
 /*
  * This isn't called much at all
  */
-int mpage_readpage(struct page *page, get_block_t get_block)
+int mpage_read_folio(struct folio *folio, get_block_t get_block)
 {
        struct mpage_readpage_args args = {
-               .page = page,
+               .page = &folio->page,
                .nr_pages = 1,
                .get_block = get_block,
        };
 
+       VM_BUG_ON_FOLIO(folio_test_large(folio), folio);
+
        args.bio = do_mpage_readpage(&args);
        if (args.bio)
                mpage_bio_submit(args.bio);
        return 0;
 }
-EXPORT_SYMBOL(mpage_readpage);
+EXPORT_SYMBOL(mpage_read_folio);
 
 /*
  * Writing is not so simple.
index 02297ec8dc55ac9da38fff41f283f37c0f3f6a74..26b8065401b09b0c9da73d2bb2dac48a40ac547b 100644 (file)
@@ -140,14 +140,14 @@ int nilfs_get_block(struct inode *inode, sector_t blkoff,
 }
 
 /**
- * nilfs_readpage() - implement readpage() method of nilfs_aops {}
+ * nilfs_read_folio() - implement read_folio() method of nilfs_aops {}
  * address_space_operations.
  * @file - file struct of the file to be read
- * @page - the page to be read
+ * @folio - the folio to be read
  */
-static int nilfs_readpage(struct file *file, struct page *page)
+static int nilfs_read_folio(struct file *file, struct folio *folio)
 {
-       return mpage_readpage(page, nilfs_get_block);
+       return mpage_read_folio(folio, nilfs_get_block);
 }
 
 static void nilfs_readahead(struct readahead_control *rac)
@@ -298,7 +298,7 @@ nilfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 
 const struct address_space_operations nilfs_aops = {
        .writepage              = nilfs_writepage,
-       .readpage               = nilfs_readpage,
+       .read_folio             = nilfs_read_folio,
        .writepages             = nilfs_writepages,
        .dirty_folio            = nilfs_dirty_folio,
        .readahead              = nilfs_readahead,
index bfd71f384e210600a529b7f343736ea5d26ffe26..74f60c457f287a85ef0f8771f3ae0fbd6aba7ae6 100644 (file)
@@ -676,8 +676,9 @@ static sector_t ntfs_bmap(struct address_space *mapping, sector_t block)
        return generic_block_bmap(mapping, block, ntfs_get_block_bmap);
 }
 
-static int ntfs_readpage(struct file *file, struct page *page)
+static int ntfs_read_folio(struct file *file, struct folio *folio)
 {
+       struct page *page = &folio->page;
        int err;
        struct address_space *mapping = page->mapping;
        struct inode *inode = mapping->host;
@@ -701,7 +702,7 @@ static int ntfs_readpage(struct file *file, struct page *page)
        }
 
        /* Normal + sparse files. */
-       return mpage_readpage(page, ntfs_get_block);
+       return mpage_read_folio(folio, ntfs_get_block);
 }
 
 static void ntfs_readahead(struct readahead_control *rac)
@@ -1940,7 +1941,7 @@ const struct inode_operations ntfs_link_inode_operations = {
 };
 
 const struct address_space_operations ntfs_aops = {
-       .readpage       = ntfs_readpage,
+       .read_folio     = ntfs_read_folio,
        .readahead      = ntfs_readahead,
        .writepage      = ntfs_writepage,
        .writepages     = ntfs_writepages,
@@ -1952,7 +1953,7 @@ const struct address_space_operations ntfs_aops = {
 };
 
 const struct address_space_operations ntfs_aops_cmpr = {
-       .readpage       = ntfs_readpage,
+       .read_folio     = ntfs_read_folio,
        .readahead      = ntfs_readahead,
 };
 // clang-format on
index 9d8e7e9788a1dfa4381fda1cd4e63fb97474aae9..b9895afca9d110a38b94d040180114a7e20b449b 100644 (file)
@@ -94,9 +94,9 @@ static int qnx6_check_blockptr(__fs32 ptr)
        return 1;
 }
 
-static int qnx6_readpage(struct file *file, struct page *page)
+static int qnx6_read_folio(struct file *file, struct folio *folio)
 {
-       return mpage_readpage(page, qnx6_get_block);
+       return mpage_read_folio(folio, qnx6_get_block);
 }
 
 static void qnx6_readahead(struct readahead_control *rac)
@@ -496,7 +496,7 @@ static sector_t qnx6_bmap(struct address_space *mapping, sector_t block)
        return generic_block_bmap(mapping, block, qnx6_get_block);
 }
 static const struct address_space_operations qnx6_aops = {
-       .readpage       = qnx6_readpage,
+       .read_folio     = qnx6_read_folio,
        .readahead      = qnx6_readahead,
        .bmap           = qnx6_bmap
 };
index 866f9a53248ec9eb4a685d64d3f9d2ad5ef6b669..edc88716751abd4e8d4eb90cfd9dc4261ed828ef 100644 (file)
@@ -193,9 +193,9 @@ static int udf_writepages(struct address_space *mapping,
        return mpage_writepages(mapping, wbc, udf_get_block);
 }
 
-static int udf_readpage(struct file *file, struct page *page)
+static int udf_read_folio(struct file *file, struct folio *folio)
 {
-       return mpage_readpage(page, udf_get_block);
+       return mpage_read_folio(folio, udf_get_block);
 }
 
 static void udf_readahead(struct readahead_control *rac)
@@ -237,7 +237,7 @@ static sector_t udf_bmap(struct address_space *mapping, sector_t block)
 const struct address_space_operations udf_aops = {
        .dirty_folio    = block_dirty_folio,
        .invalidate_folio = block_invalidate_folio,
-       .readpage       = udf_readpage,
+       .read_folio     = udf_read_folio,
        .readahead      = udf_readahead,
        .writepage      = udf_writepage,
        .writepages     = udf_writepages,
index f4f5e90a6844151597506cfc81d87ec0846fe71d..43986f7ec4dd3589c2035e8f8e8e02ea507a7474 100644 (file)
@@ -16,7 +16,7 @@ struct writeback_control;
 struct readahead_control;
 
 void mpage_readahead(struct readahead_control *, get_block_t get_block);
-int mpage_readpage(struct page *page, get_block_t get_block);
+int mpage_read_folio(struct folio *folio, get_block_t get_block);
 int mpage_writepages(struct address_space *mapping,
                struct writeback_control *wbc, get_block_t get_block);
 int mpage_writepage(struct page *page, get_block_t *get_block,