f2fs: Use a folio in ra_data_block()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 31 Mar 2025 20:11:20 +0000 (21:11 +0100)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 28 Apr 2025 15:26:34 +0000 (15:26 +0000)
Remove three hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/gc.c

index 4e611f39d673873ebf164deab86f74a74cef7fc0..9e7de9e1f81567a8013860fff33feba35ff6ac13 100644 (file)
@@ -1205,7 +1205,7 @@ static int ra_data_block(struct inode *inode, pgoff_t index)
        struct address_space *mapping = f2fs_is_cow_file(inode) ?
                                F2FS_I(inode)->atomic_inode->i_mapping : inode->i_mapping;
        struct dnode_of_data dn;
-       struct page *page;
+       struct folio *folio;
        struct f2fs_io_info fio = {
                .sbi = sbi,
                .ino = inode->i_ino,
@@ -1218,16 +1218,16 @@ static int ra_data_block(struct inode *inode, pgoff_t index)
        };
        int err;
 
-       page = f2fs_grab_cache_page(mapping, index, true);
-       if (!page)
-               return -ENOMEM;
+       folio = f2fs_grab_cache_folio(mapping, index, true);
+       if (IS_ERR(folio))
+               return PTR_ERR(folio);
 
        if (f2fs_lookup_read_extent_cache_block(inode, index,
                                                &dn.data_blkaddr)) {
                if (unlikely(!f2fs_is_valid_blkaddr(sbi, dn.data_blkaddr,
                                                DATA_GENERIC_ENHANCE_READ))) {
                        err = -EFSCORRUPTED;
-                       goto put_page;
+                       goto put_folio;
                }
                goto got_it;
        }
@@ -1235,28 +1235,28 @@ static int ra_data_block(struct inode *inode, pgoff_t index)
        set_new_dnode(&dn, inode, NULL, NULL, 0);
        err = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
        if (err)
-               goto put_page;
+               goto put_folio;
        f2fs_put_dnode(&dn);
 
        if (!__is_valid_data_blkaddr(dn.data_blkaddr)) {
                err = -ENOENT;
-               goto put_page;
+               goto put_folio;
        }
        if (unlikely(!f2fs_is_valid_blkaddr(sbi, dn.data_blkaddr,
                                                DATA_GENERIC_ENHANCE))) {
                err = -EFSCORRUPTED;
-               goto put_page;
+               goto put_folio;
        }
 got_it:
-       /* read page */
-       fio.page = page;
+       /* read folio */
+       fio.page = &folio->page;
        fio.new_blkaddr = fio.old_blkaddr = dn.data_blkaddr;
 
        /*
         * don't cache encrypted data into meta inode until previous dirty
         * data were writebacked to avoid racing between GC and flush.
         */
-       f2fs_wait_on_page_writeback(page, DATA, true, true);
+       f2fs_folio_wait_writeback(folio, DATA, true, true);
 
        f2fs_wait_on_block_writeback(inode, dn.data_blkaddr);
 
@@ -1265,14 +1265,14 @@ got_it:
                                        FGP_LOCK | FGP_CREAT, GFP_NOFS);
        if (!fio.encrypted_page) {
                err = -ENOMEM;
-               goto put_page;
+               goto put_folio;
        }
 
        err = f2fs_submit_page_bio(&fio);
        if (err)
                goto put_encrypted_page;
        f2fs_put_page(fio.encrypted_page, 0);
-       f2fs_put_page(page, 1);
+       f2fs_folio_put(folio, true);
 
        f2fs_update_iostat(sbi, inode, FS_DATA_READ_IO, F2FS_BLKSIZE);
        f2fs_update_iostat(sbi, NULL, FS_GDATA_READ_IO, F2FS_BLKSIZE);
@@ -1280,8 +1280,8 @@ got_it:
        return 0;
 put_encrypted_page:
        f2fs_put_page(fio.encrypted_page, 1);
-put_page:
-       f2fs_put_page(page, 1);
+put_folio:
+       f2fs_folio_put(folio, true);
        return err;
 }