Skip to content

Commit 4ecaf58

Browse files
Matthew Wilcox (Oracle)Jaegeuk Kim
authored andcommitted
f2fs: Add folio counterparts to page_private_flags functions
Name these new functions folio_test_f2fs_*(), folio_set_f2fs_*() and folio_clear_f2fs_*(). Convert all callers which currently have a folio and cast back to a page. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
1 parent a5f3be6 commit 4ecaf58

8 files changed

Lines changed: 50 additions & 22 deletions

File tree

fs/f2fs/checkpoint.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ static bool f2fs_dirty_meta_folio(struct address_space *mapping,
485485
folio_mark_uptodate(folio);
486486
if (filemap_dirty_folio(mapping, folio)) {
487487
inc_page_count(F2FS_M_SB(mapping), F2FS_DIRTY_META);
488-
set_page_private_reference(&folio->page);
488+
folio_set_f2fs_reference(folio);
489489
return true;
490490
}
491491
return false;
@@ -1045,7 +1045,7 @@ void f2fs_update_dirty_folio(struct inode *inode, struct folio *folio)
10451045
inode_inc_dirty_pages(inode);
10461046
spin_unlock(&sbi->inode_lock[type]);
10471047

1048-
set_page_private_reference(&folio->page);
1048+
folio_set_f2fs_reference(folio);
10491049
}
10501050

10511051
void f2fs_remove_dirty_inode(struct inode *inode)

fs/f2fs/data.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ static void f2fs_write_end_io(struct bio *bio)
360360
dec_page_count(sbi, type);
361361
if (f2fs_in_warm_node_list(sbi, folio))
362362
f2fs_del_fsync_node_entry(sbi, folio);
363-
clear_page_private_gcing(&folio->page);
363+
folio_clear_f2fs_gcing(folio);
364364
folio_end_writeback(folio);
365365
}
366366
if (!get_pages(sbi, F2FS_WB_CP_DATA) &&
@@ -2659,7 +2659,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
26592659

26602660
/* Use COW inode to make dnode_of_data for atomic write */
26612661
atomic_commit = f2fs_is_atomic_file(inode) &&
2662-
page_private_atomic(folio_page(folio, 0));
2662+
folio_test_f2fs_atomic(folio);
26632663
if (atomic_commit)
26642664
set_new_dnode(&dn, F2FS_I(inode)->cow_inode, NULL, NULL, 0);
26652665
else
@@ -2690,7 +2690,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
26902690
/* This page is already truncated */
26912691
if (fio->old_blkaddr == NULL_ADDR) {
26922692
folio_clear_uptodate(folio);
2693-
clear_page_private_gcing(folio_page(folio, 0));
2693+
folio_clear_f2fs_gcing(folio);
26942694
goto out_writepage;
26952695
}
26962696
got_it:
@@ -2760,7 +2760,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
27602760
trace_f2fs_do_write_data_page(folio, OPU);
27612761
set_inode_flag(inode, FI_APPEND_WRITE);
27622762
if (atomic_commit)
2763-
clear_page_private_atomic(folio_page(folio, 0));
2763+
folio_clear_f2fs_atomic(folio);
27642764
out_writepage:
27652765
f2fs_put_dnode(&dn);
27662766
out:
@@ -3383,7 +3383,7 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
33833383
f2fs_do_read_inline_data(folio, ifolio);
33843384
set_inode_flag(inode, FI_DATA_EXIST);
33853385
if (inode->i_nlink)
3386-
set_page_private_inline(&ifolio->page);
3386+
folio_set_f2fs_inline(ifolio);
33873387
goto out;
33883388
}
33893389
err = f2fs_convert_inline_folio(&dn, folio);
@@ -3703,7 +3703,7 @@ static int f2fs_write_end(struct file *file,
37033703
folio_mark_dirty(folio);
37043704

37053705
if (f2fs_is_atomic_file(inode))
3706-
set_page_private_atomic(folio_page(folio, 0));
3706+
folio_set_f2fs_atomic(folio);
37073707

37083708
if (pos + copied > i_size_read(inode) &&
37093709
!f2fs_verity_in_progress(inode)) {

fs/f2fs/f2fs.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2461,6 +2461,13 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
24612461
}
24622462

24632463
#define PAGE_PRIVATE_GET_FUNC(name, flagname) \
2464+
static inline bool folio_test_f2fs_##name(const struct folio *folio) \
2465+
{ \
2466+
unsigned long priv = (unsigned long)folio->private; \
2467+
unsigned long v = (1UL << PAGE_PRIVATE_NOT_POINTER) | \
2468+
(1UL << PAGE_PRIVATE_##flagname); \
2469+
return (priv & v) == v; \
2470+
} \
24642471
static inline bool page_private_##name(struct page *page) \
24652472
{ \
24662473
return PagePrivate(page) && \
@@ -2469,6 +2476,17 @@ static inline bool page_private_##name(struct page *page) \
24692476
}
24702477

24712478
#define PAGE_PRIVATE_SET_FUNC(name, flagname) \
2479+
static inline void folio_set_f2fs_##name(struct folio *folio) \
2480+
{ \
2481+
unsigned long v = (1UL << PAGE_PRIVATE_NOT_POINTER) | \
2482+
(1UL << PAGE_PRIVATE_##flagname); \
2483+
if (!folio->private) \
2484+
folio_attach_private(folio, (void *)v); \
2485+
else { \
2486+
v |= (unsigned long)folio->private; \
2487+
folio->private = (void *)v; \
2488+
} \
2489+
} \
24722490
static inline void set_page_private_##name(struct page *page) \
24732491
{ \
24742492
if (!PagePrivate(page)) \
@@ -2478,6 +2496,16 @@ static inline void set_page_private_##name(struct page *page) \
24782496
}
24792497

24802498
#define PAGE_PRIVATE_CLEAR_FUNC(name, flagname) \
2499+
static inline void folio_clear_f2fs_##name(struct folio *folio) \
2500+
{ \
2501+
unsigned long v = (unsigned long)folio->private; \
2502+
\
2503+
v &= ~(1UL << PAGE_PRIVATE_##flagname); \
2504+
if (v == (1UL << PAGE_PRIVATE_NOT_POINTER)) \
2505+
folio_detach_private(folio); \
2506+
else \
2507+
folio->private = (void *)v; \
2508+
} \
24812509
static inline void clear_page_private_##name(struct page *page) \
24822510
{ \
24832511
clear_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \

fs/f2fs/file.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,7 +1463,7 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
14631463

14641464
memcpy_folio(fdst, 0, fsrc, 0, PAGE_SIZE);
14651465
folio_mark_dirty(fdst);
1466-
set_page_private_gcing(&fdst->page);
1466+
folio_set_f2fs_gcing(fdst);
14671467
f2fs_folio_put(fdst, true);
14681468
f2fs_folio_put(fsrc, true);
14691469

@@ -2987,7 +2987,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
29872987
f2fs_folio_wait_writeback(folio, DATA, true, true);
29882988

29892989
folio_mark_dirty(folio);
2990-
set_page_private_gcing(&folio->page);
2990+
folio_set_f2fs_gcing(folio);
29912991
f2fs_folio_put(folio, true);
29922992

29932993
idx++;
@@ -4424,7 +4424,7 @@ static int redirty_blocks(struct inode *inode, pgoff_t page_idx, int len)
44244424
f2fs_folio_wait_writeback(folio, DATA, true, true);
44254425

44264426
folio_mark_dirty(folio);
4427-
set_page_private_gcing(&folio->page);
4427+
folio_set_f2fs_gcing(folio);
44284428
redirty_idx = folio_next_index(folio);
44294429
folio_unlock(folio);
44304430
folio_put_refs(folio, 2);

fs/f2fs/gc.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,7 +1473,7 @@ static int move_data_page(struct inode *inode, block_t bidx, int gc_type,
14731473
goto out;
14741474
}
14751475
folio_mark_dirty(folio);
1476-
set_page_private_gcing(&folio->page);
1476+
folio_set_f2fs_gcing(folio);
14771477
} else {
14781478
struct f2fs_io_info fio = {
14791479
.sbi = F2FS_I_SB(inode),
@@ -1499,11 +1499,11 @@ static int move_data_page(struct inode *inode, block_t bidx, int gc_type,
14991499
f2fs_remove_dirty_inode(inode);
15001500
}
15011501

1502-
set_page_private_gcing(&folio->page);
1502+
folio_set_f2fs_gcing(folio);
15031503

15041504
err = f2fs_do_write_data_page(&fio);
15051505
if (err) {
1506-
clear_page_private_gcing(&folio->page);
1506+
folio_clear_f2fs_gcing(folio);
15071507
if (err == -ENOMEM) {
15081508
memalloc_retry_wait(GFP_NOFS);
15091509
goto retry;

fs/f2fs/inline.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio)
206206

207207
/* clear inline data and flag after data writeback */
208208
f2fs_truncate_inline_inode(dn->inode, dn->inode_folio, 0);
209-
clear_page_private_inline(&dn->inode_folio->page);
209+
folio_clear_f2fs_inline(dn->inode_folio);
210210
clear_out:
211211
stat_dec_inline_inode(dn->inode);
212212
clear_inode_flag(dn->inode, FI_INLINE_DATA);
@@ -286,7 +286,7 @@ int f2fs_write_inline_data(struct inode *inode, struct folio *folio)
286286
set_inode_flag(inode, FI_APPEND_WRITE);
287287
set_inode_flag(inode, FI_DATA_EXIST);
288288

289-
clear_page_private_inline(&ifolio->page);
289+
folio_clear_f2fs_inline(ifolio);
290290
f2fs_folio_put(ifolio, 1);
291291
return 0;
292292
}

fs/f2fs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -749,7 +749,7 @@ void f2fs_update_inode(struct inode *inode, struct folio *node_folio)
749749

750750
/* deleted inode */
751751
if (inode->i_nlink == 0)
752-
clear_page_private_inline(&node_folio->page);
752+
folio_clear_f2fs_inline(node_folio);
753753

754754
init_idisk_time(inode);
755755
#ifdef CONFIG_F2FS_CHECK_FS

fs/f2fs/node.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1985,8 +1985,8 @@ void f2fs_flush_inline_data(struct f2fs_sb_info *sbi)
19851985
goto unlock;
19861986

19871987
/* flush inline_data, if it's async context. */
1988-
if (page_private_inline(&folio->page)) {
1989-
clear_page_private_inline(&folio->page);
1988+
if (folio_test_f2fs_inline(folio)) {
1989+
folio_clear_f2fs_inline(folio);
19901990
folio_unlock(folio);
19911991
flush_inline_data(sbi, ino_of_node(folio));
19921992
continue;
@@ -2067,8 +2067,8 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
20672067
goto write_node;
20682068

20692069
/* flush inline_data */
2070-
if (page_private_inline(&folio->page)) {
2071-
clear_page_private_inline(&folio->page);
2070+
if (folio_test_f2fs_inline(folio)) {
2071+
folio_clear_f2fs_inline(folio);
20722072
folio_unlock(folio);
20732073
flush_inline_data(sbi, ino_of_node(folio));
20742074
goto lock_node;
@@ -2216,7 +2216,7 @@ static bool f2fs_dirty_node_folio(struct address_space *mapping,
22162216
#endif
22172217
if (filemap_dirty_folio(mapping, folio)) {
22182218
inc_page_count(F2FS_M_SB(mapping), F2FS_DIRTY_NODES);
2219-
set_page_private_reference(&folio->page);
2219+
folio_set_f2fs_reference(folio);
22202220
return true;
22212221
}
22222222
return false;

0 commit comments

Comments
 (0)