Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

f2fs: Convert to release_folio

While converting f2fs_release_page() to f2fs_release_folio(), cache the
sb_info so we don't need to retrieve it twice, and remove the redundant
call to set_page_private(). The use of folios should be pushed further
into f2fs from here.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Jeff Layton <jlayton@kernel.org>

+21 -19
+1 -1
fs/f2fs/checkpoint.c
··· 468 468 .writepages = f2fs_write_meta_pages, 469 469 .dirty_folio = f2fs_dirty_meta_folio, 470 470 .invalidate_folio = f2fs_invalidate_folio, 471 - .releasepage = f2fs_release_page, 471 + .release_folio = f2fs_release_folio, 472 472 #ifdef CONFIG_MIGRATION 473 473 .migratepage = f2fs_migrate_page, 474 474 #endif
+1 -1
fs/f2fs/compress.c
··· 1746 1746 } 1747 1747 1748 1748 const struct address_space_operations f2fs_compress_aops = { 1749 - .releasepage = f2fs_release_page, 1749 + .release_folio = f2fs_release_folio, 1750 1750 .invalidate_folio = f2fs_invalidate_folio, 1751 1751 }; 1752 1752
+17 -15
fs/f2fs/data.c
··· 3528 3528 folio_detach_private(folio); 3529 3529 } 3530 3530 3531 - int f2fs_release_page(struct page *page, gfp_t wait) 3531 + bool f2fs_release_folio(struct folio *folio, gfp_t wait) 3532 3532 { 3533 - /* If this is dirty page, keep PagePrivate */ 3534 - if (PageDirty(page)) 3535 - return 0; 3533 + struct f2fs_sb_info *sbi; 3534 + 3535 + /* If this is dirty folio, keep private data */ 3536 + if (folio_test_dirty(folio)) 3537 + return false; 3536 3538 3537 3539 /* This is atomic written page, keep Private */ 3538 - if (page_private_atomic(page)) 3539 - return 0; 3540 + if (page_private_atomic(&folio->page)) 3541 + return false; 3540 3542 3541 - if (test_opt(F2FS_P_SB(page), COMPRESS_CACHE)) { 3542 - struct inode *inode = page->mapping->host; 3543 + sbi = F2FS_M_SB(folio->mapping); 3544 + if (test_opt(sbi, COMPRESS_CACHE)) { 3545 + struct inode *inode = folio->mapping->host; 3543 3546 3544 - if (inode->i_ino == F2FS_COMPRESS_INO(F2FS_I_SB(inode))) 3545 - clear_page_private_data(page); 3547 + if (inode->i_ino == F2FS_COMPRESS_INO(sbi)) 3548 + clear_page_private_data(&folio->page); 3546 3549 } 3547 3550 3548 - clear_page_private_gcing(page); 3551 + clear_page_private_gcing(&folio->page); 3549 3552 3550 - detach_page_private(page); 3551 - set_page_private(page, 0); 3552 - return 1; 3553 + folio_detach_private(folio); 3554 + return true; 3553 3555 } 3554 3556 3555 3557 static bool f2fs_dirty_data_folio(struct address_space *mapping, ··· 3946 3944 .write_end = f2fs_write_end, 3947 3945 .dirty_folio = f2fs_dirty_data_folio, 3948 3946 .invalidate_folio = f2fs_invalidate_folio, 3949 - .releasepage = f2fs_release_page, 3947 + .release_folio = f2fs_release_folio, 3950 3948 .direct_IO = noop_direct_IO, 3951 3949 .bmap = f2fs_bmap, 3952 3950 .swap_activate = f2fs_swap_activate,
+1 -1
fs/f2fs/f2fs.h
··· 3768 3768 int compr_blocks, bool allow_balance); 3769 3769 void f2fs_write_failed(struct inode *inode, loff_t to); 3770 3770 void f2fs_invalidate_folio(struct folio *folio, size_t offset, size_t length); 3771 - int f2fs_release_page(struct page *page, gfp_t wait); 3771 + bool f2fs_release_folio(struct folio *folio, gfp_t wait); 3772 3772 #ifdef CONFIG_MIGRATION 3773 3773 int f2fs_migrate_page(struct address_space *mapping, struct page *newpage, 3774 3774 struct page *page, enum migrate_mode mode);
+1 -1
fs/f2fs/node.c
··· 2165 2165 .writepages = f2fs_write_node_pages, 2166 2166 .dirty_folio = f2fs_dirty_node_folio, 2167 2167 .invalidate_folio = f2fs_invalidate_folio, 2168 - .releasepage = f2fs_release_page, 2168 + .release_folio = f2fs_release_folio, 2169 2169 #ifdef CONFIG_MIGRATION 2170 2170 .migratepage = f2fs_migrate_page, 2171 2171 #endif