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

ext4: Convert ext4_read_inline_page() to ext4_read_inline_folio()

All callers now have a folio, so pass it and use it. The folio may
be large, although I doubt we'll want to use a large folio for an
inline file.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Theodore Ts'o <tytso@mit.edu>
Link: https://lore.kernel.org/r/20230324180129.1220691-15-willy@infradead.org
Signed-off-by: Theodore Ts'o <tytso@mit.edu>

authored by

Matthew Wilcox and committed by
Theodore Ts'o
6b87fbe4 9a9d01f0

+14 -13
+14 -13
fs/ext4/inline.c
··· 467 467 return error; 468 468 } 469 469 470 - static int ext4_read_inline_page(struct inode *inode, struct page *page) 470 + static int ext4_read_inline_folio(struct inode *inode, struct folio *folio) 471 471 { 472 472 void *kaddr; 473 473 int ret = 0; 474 474 size_t len; 475 475 struct ext4_iloc iloc; 476 476 477 - BUG_ON(!PageLocked(page)); 477 + BUG_ON(!folio_test_locked(folio)); 478 478 BUG_ON(!ext4_has_inline_data(inode)); 479 - BUG_ON(page->index); 479 + BUG_ON(folio->index); 480 480 481 481 if (!EXT4_I(inode)->i_inline_off) { 482 482 ext4_warning(inode->i_sb, "inode %lu doesn't have inline data.", ··· 489 489 goto out; 490 490 491 491 len = min_t(size_t, ext4_get_inline_size(inode), i_size_read(inode)); 492 - kaddr = kmap_atomic(page); 492 + BUG_ON(len > PAGE_SIZE); 493 + kaddr = kmap_local_folio(folio, 0); 493 494 ret = ext4_read_inline_data(inode, kaddr, len, &iloc); 494 - flush_dcache_page(page); 495 - kunmap_atomic(kaddr); 496 - zero_user_segment(page, len, PAGE_SIZE); 497 - SetPageUptodate(page); 495 + flush_dcache_folio(folio); 496 + kunmap_local(kaddr); 497 + folio_zero_segment(folio, len, folio_size(folio)); 498 + folio_mark_uptodate(folio); 498 499 brelse(iloc.bh); 499 500 500 501 out: ··· 517 516 * So for all the other pages, just set them uptodate. 518 517 */ 519 518 if (!folio->index) 520 - ret = ext4_read_inline_page(inode, &folio->page); 519 + ret = ext4_read_inline_folio(inode, folio); 521 520 else if (!folio_test_uptodate(folio)) { 522 521 folio_zero_segment(folio, 0, folio_size(folio)); 523 522 folio_mark_uptodate(folio); ··· 582 581 from = 0; 583 582 to = ext4_get_inline_size(inode); 584 583 if (!folio_test_uptodate(folio)) { 585 - ret = ext4_read_inline_page(inode, &folio->page); 584 + ret = ext4_read_inline_folio(inode, folio); 586 585 if (ret < 0) 587 586 goto out; 588 587 } ··· 708 707 } 709 708 710 709 if (!folio_test_uptodate(folio)) { 711 - ret = ext4_read_inline_page(inode, &folio->page); 710 + ret = ext4_read_inline_folio(inode, folio); 712 711 if (ret < 0) { 713 712 folio_unlock(folio); 714 713 folio_put(folio); ··· 865 864 inline_size = ext4_get_inline_size(inode); 866 865 867 866 if (!folio_test_uptodate(folio)) { 868 - ret = ext4_read_inline_page(inode, &folio->page); 867 + ret = ext4_read_inline_folio(inode, folio); 869 868 if (ret < 0) 870 869 goto out; 871 870 } ··· 958 957 } 959 958 960 959 if (!folio_test_uptodate(folio)) { 961 - ret = ext4_read_inline_page(inode, &folio->page); 960 + ret = ext4_read_inline_folio(inode, folio); 962 961 if (ret < 0) 963 962 goto out_release_page; 964 963 }