Skip to content

Commit 12e61ce

Browse files
chaseyuJaegeuk Kim
authored andcommitted
f2fs: convert f2fs_write_begin() to use folio
Convert to use folio, so that we can get rid of 'page->index' to prepare for removal of 'index' field in structure page [1]. [1] https://lore.kernel.org/all/[email protected]/ Cc: Matthew Wilcox <[email protected]> Signed-off-by: Chao Yu <[email protected]> Reviewed-by: Li Zetao <[email protected]> Signed-off-by: Jaegeuk Kim <[email protected]>
1 parent 1e5df24 commit 12e61ce

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

fs/f2fs/data.c

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3378,11 +3378,11 @@ void f2fs_write_failed(struct inode *inode, loff_t to)
33783378
}
33793379

33803380
static int prepare_write_begin(struct f2fs_sb_info *sbi,
3381-
struct page *page, loff_t pos, unsigned len,
3381+
struct folio *folio, loff_t pos, unsigned int len,
33823382
block_t *blk_addr, bool *node_changed)
33833383
{
3384-
struct inode *inode = page->mapping->host;
3385-
pgoff_t index = page->index;
3384+
struct inode *inode = folio->mapping->host;
3385+
pgoff_t index = folio->index;
33863386
struct dnode_of_data dn;
33873387
struct page *ipage;
33883388
bool locked = false;
@@ -3419,13 +3419,13 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
34193419

34203420
if (f2fs_has_inline_data(inode)) {
34213421
if (pos + len <= MAX_INLINE_DATA(inode)) {
3422-
f2fs_do_read_inline_data(page_folio(page), ipage);
3422+
f2fs_do_read_inline_data(folio, ipage);
34233423
set_inode_flag(inode, FI_DATA_EXIST);
34243424
if (inode->i_nlink)
34253425
set_page_private_inline(ipage);
34263426
goto out;
34273427
}
3428-
err = f2fs_convert_inline_page(&dn, page);
3428+
err = f2fs_convert_inline_page(&dn, folio_page(folio, 0));
34293429
if (err || dn.data_blkaddr != NULL_ADDR)
34303430
goto out;
34313431
}
@@ -3518,12 +3518,12 @@ static int __reserve_data_block(struct inode *inode, pgoff_t index,
35183518
}
35193519

35203520
static int prepare_atomic_write_begin(struct f2fs_sb_info *sbi,
3521-
struct page *page, loff_t pos, unsigned int len,
3521+
struct folio *folio, loff_t pos, unsigned int len,
35223522
block_t *blk_addr, bool *node_changed, bool *use_cow)
35233523
{
3524-
struct inode *inode = page->mapping->host;
3524+
struct inode *inode = folio->mapping->host;
35253525
struct inode *cow_inode = F2FS_I(inode)->cow_inode;
3526-
pgoff_t index = page->index;
3526+
pgoff_t index = folio->index;
35273527
int err = 0;
35283528
block_t ori_blk_addr = NULL_ADDR;
35293529

@@ -3566,6 +3566,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
35663566
struct inode *inode = mapping->host;
35673567
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
35683568
struct page *page = NULL;
3569+
struct folio *folio;
35693570
pgoff_t index = ((unsigned long long) pos) >> PAGE_SHIFT;
35703571
bool need_balance = false;
35713572
bool use_cow = false;
@@ -3625,22 +3626,23 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
36253626
/* TODO: cluster can be compressed due to race with .writepage */
36263627

36273628
*pagep = page;
3629+
folio = page_folio(page);
36283630

36293631
if (f2fs_is_atomic_file(inode))
3630-
err = prepare_atomic_write_begin(sbi, page, pos, len,
3632+
err = prepare_atomic_write_begin(sbi, folio, pos, len,
36313633
&blkaddr, &need_balance, &use_cow);
36323634
else
3633-
err = prepare_write_begin(sbi, page, pos, len,
3635+
err = prepare_write_begin(sbi, folio, pos, len,
36343636
&blkaddr, &need_balance);
36353637
if (err)
36363638
goto fail;
36373639

36383640
if (need_balance && !IS_NOQUOTA(inode) &&
36393641
has_not_enough_free_secs(sbi, 0, 0)) {
3640-
unlock_page(page);
3642+
folio_unlock(folio);
36413643
f2fs_balance_fs(sbi, true);
3642-
lock_page(page);
3643-
if (page->mapping != mapping) {
3644+
folio_lock(folio);
3645+
if (folio->mapping != mapping) {
36443646
/* The page got truncated from under us */
36453647
f2fs_put_page(page, 1);
36463648
goto repeat;
@@ -3649,18 +3651,18 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
36493651

36503652
f2fs_wait_on_page_writeback(page, DATA, false, true);
36513653

3652-
if (len == PAGE_SIZE || PageUptodate(page))
3654+
if (len == PAGE_SIZE || folio_test_uptodate(folio))
36533655
return 0;
36543656

36553657
if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode) &&
36563658
!f2fs_verity_in_progress(inode)) {
3657-
zero_user_segment(page, len, PAGE_SIZE);
3659+
folio_zero_segment(folio, len, folio_size(folio));
36583660
return 0;
36593661
}
36603662

36613663
if (blkaddr == NEW_ADDR) {
3662-
zero_user_segment(page, 0, PAGE_SIZE);
3663-
SetPageUptodate(page);
3664+
folio_zero_segment(folio, 0, folio_size(folio));
3665+
folio_mark_uptodate(folio);
36643666
} else {
36653667
if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
36663668
DATA_GENERIC_ENHANCE_READ)) {
@@ -3669,16 +3671,16 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
36693671
}
36703672
err = f2fs_submit_page_read(use_cow ?
36713673
F2FS_I(inode)->cow_inode : inode,
3672-
page_folio(page), blkaddr, 0, true);
3674+
folio, blkaddr, 0, true);
36733675
if (err)
36743676
goto fail;
36753677

3676-
lock_page(page);
3677-
if (unlikely(page->mapping != mapping)) {
3678+
folio_lock(folio);
3679+
if (unlikely(folio->mapping != mapping)) {
36783680
f2fs_put_page(page, 1);
36793681
goto repeat;
36803682
}
3681-
if (unlikely(!PageUptodate(page))) {
3683+
if (unlikely(!folio_test_uptodate(folio))) {
36823684
err = -EIO;
36833685
goto fail;
36843686
}

0 commit comments

Comments
 (0)