linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16
@ 2025-03-31 20:10 Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 001/153] f2fs: Use a folio in f2fs_compress_free_page() Matthew Wilcox (Oracle)
                   ` (154 more replies)
  0 siblings, 155 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Sorry for the length of this series.  Each patch in this series builds,
but obviously I haven't done any testing.  It should be easy to bisect
to any mistakes I've made.  This conversion isn't complete; I estimate
another 100 or so patches will be needed.

Matthew Wilcox (Oracle) (153):
  f2fs: Use a folio in f2fs_compress_free_page()
  f2fs: Use a folio in f2fs_write_raw_pages()
  f2fs: Introduce fio_inode()
  f2fs: Use F2FS_P_SB() in f2fs_is_compressed_page()
  f2fs: Use bio_for_each_folio_all() in __has_merged_page()
  f2fs: Use a folio in add_ipu_page()
  f2fs: Remove access to page->mapping in f2fs_is_cp_guaranteed()
  f2fs: Use a folio in move_data_block()
  f2fs: Use a folio in f2fs_quota_read()
  f2fs: Add f2fs_grab_meta_folio()
  f2fs: Use a folio in commit_checkpoint()
  f2fs: Convert __f2fs_write_meta_page() to __f2fs_write_meta_folio()
  f2fs: Use f2fs_folio_wait_writeback()
  f2fs: Pass a folio to f2fs_submit_merged_ipu_write()
  f2fs: Convert __get_meta_page() to __get_meta_folio()
  f2fs: Convert f2fs_get_tmp_page() to f2fs_get_tmp_folio()
  f2fs: Pass a folio to next_blkaddr_of_node()
  f2fs: Use a folio in f2fs_ra_meta_pages()
  f2fs: Use a folio in f2fs_ra_meta_pages_cond()
  f2fs: Use a folio in write_orphan_inodes()
  f2fs: Use a folio in get_next_nat_page()
  f2fs: Convert get_next_sit_page() to get_next_sit_folio()
  f2fs: Use a folio in f2fs_update_meta_page()
  f2fs: Use a folio in write_current_sum_page()
  f2fs: Use a folio in write_compacted_summaries()
  f2fs: Remove f2fs_grab_meta_page()
  f2fs: Add f2fs_get_meta_folio()
  f2fs: Use a folio in build_sit_entries()
  f2fs: Use a folio in f2fs_recover_orphan_inodes()
  f2fs: Use a folio in validate_checkpoint()
  f2fs: Use a folio in f2fs_get_valid_checkpoint()
  f2fs: Use a folio in f2fs_get_node_info()
  f2fs: Use a folio in __get_nat_bitmaps()
  f2fs: Use a folio in read_compacted_summaries()
  f2fs: Use a folio in read_normal_summaries()
  f2fs: Remove f2fs_get_meta_page()
  f2fs: Convert f2fs_get_meta_page_retry() to
    f2fs_get_meta_folio_retry()
  f2fs: Pass an address to scan_nat_page()
  f2fs: Add f2fs_get_sum_folio()
  f2fs: Use folios in do_garbage_collect()
  f2fs: Use a folio in check_index_in_prev_nodes()
  f2fs: Use a folio in change_curseg()
  f2fs: Remove f2fs_get_sum_page()
  f2fs: Use a folio in find_in_level()
  f2fs: Use a folio in f2fs_delete_entry()
  f2fs: Use a folio in f2fs_readdir()
  f2fs: Remove f2fs_find_data_page()
  f2fs: Use a folio in f2fs_get_new_data_page()
  f2fs: Use a folio in f2fs_migrate_blocks()
  f2fs: Add f2fs_get_new_data_folio()
  highmem: Add memcpy_folio()
  f2fs: Use a folio in __clone_blkaddrs()
  f2fs: Use a folio in f2fs_defragment_range()
  f2fs: Remove f2fs_get_lock_data_page()
  f2fs: Use a folio in fill_zero()
  f2fs: Use a folio in f2fs_add_regular_entry()
  f2fs: Use a folio in make_empty_dir()
  f2fs: Remove f2fs_get_new_data_page()
  f2fs: Use a folio in f2fs_xattr_fiemap()
  f2fs: Use a folio in ra_data_block()
  f2fs: Use a folio in move_data_block()
  f2fs: Use a folio in f2fs_convert_inline_inode()
  f2fs: Use a folio in f2fs_move_inline_dirents()
  f2fs: Add f2fs_new_node_folio()
  f2fs: Use a folio in f2fs_ra_node_page()
  f2fs: Convert read_node_page() to read_node_folio()
  f2fs: Pass a folio to f2fs_inode_chksum_verify()
  f2fs: Use a folio in f2fs_recover_inode_page()
  f2fs: Remove f2fs_grab_cache_page()
  f2fs: Add f2fs_get_xnode_folio()
  f2fs: Use a folio in write_all_xattrs()
  f2fs: Use a folio in f2fs_recover_xattr_data()
  f2fs: Add f2fs_get_node_folio()
  f2fs: Use folios in f2fs_get_dnode_of_data()
  f2fs: Use a folio in truncate_node()
  f2fs: Use a folio in truncate_nodes()
  f2fs: Use folios in truncate_partial_nodes()
  f2fs: Pass a folio to f2fs_ra_node_pages()
  f2fs: Use a folio in gc_node_segment()
  f2fs: Convert f2fs_move_node_page() to f2fs_move_node_folio()
  f2fs: Convert __write_node_page() to __write_node_folio()
  f2fs: Use a folio in is_alive()
  f2fs: Use a folio in check_index_in_prev_nodes()
  f2fs: Remove f2fs_get_node_page()
  f2fs: Use a folio in prepare_write_begin
  f2fs: Use a folio in __find_data_block()
  f2fs: Use a folio in f2fs_init_inode_metadata()
  f2fs: Pass a folio to make_empty_dir()
  f2fs: Use a folio in f2fs_try_convert_inline_dir()
  f2fs: Use a folio in f2fs_add_inline_entry()
  f2fs: Pass a folio to f2fs_move_inline_dirents()
  f2fs: Pass a folio to f2fs_move_rehashed_dirents()
  f2fs: Use a folio in f2fs_do_truncate_blocks()
  f2fs: Use a folio in f2fs_truncate_xattr_node()
  f2fs: Pass folios to set_new_dnode()
  f2fs: Convert f2fs_convert_inline_page() to
    f2fs_convert_inline_folio()
  f2fs: Use a folio in read_xattr_block()
  f2fs: Remove f2fs_get_xnode_page()
  f2fs: Use a folio in f2fs_write_inline_data()
  f2fs: Use a folio in f2fs_read_inline_data()
  f2fs: Use a folio in f2fs_recover_inline_data()
  f2fs: Use a folio in f2fs_find_in_inline_dir()
  f2fs: Use a folio in f2fs_empty_inline_dir()
  f2fs: Use a folio in f2fs_read_inline_dir()
  f2fs: Use a folio in f2fs_inline_data_fiemap()
  f2fs: Use a folio in f2fs_update_inode_page()
  f2fs: Use a folio in do_read_inode()
  f2fs: Pass folios to f2fs_init_acl()
  f2fs: Pass a folio to f2fs_setxattr()
  f2fs: Pass a folio to __f2fs_setxattr()
  f2fs: Pass a folio to write_all_xattrs()
  f2fs: Use a folio in read_inline_xattr()
  f2fs: Use a folio in f2fs_recover_inline_xattr()
  f2fs: Remove f2fs_get_inode_page()
  f2fs: Pass a folio to f2fs_getxattr()
  f2fs: Pass a folio to read_inline_xattr()
  f2fs: Pass a folio to do_recover_data()
  f2fs: Pass a folio to f2fs_recover_inline_xattr()
  f2fs: Pass a folio to inline_xattr_addr()
  f2fs: Pass a folio to init_dent_inode()
  f2fs: Pass a folio to f2fs_make_empty_inline_dir()
  f2fs: Pass a folio to f2fs_has_enough_room()
  f2fs: Convert dnode_of_data->inode_page to inode_folio
  f2fs: Pass a folio to f2fs_do_read_inline_data()
  f2fs: Pass a folio to f2fs_truncate_inline_inode()
  f2fs: Pass a folio to __f2fs_find_entry()
  f2fs: Pass a folio to f2fs_find_entry()
  f2fs: Pass a folio to f2fs_parent_dir()
  f2fs: Pass a folio to f2fs_delete_entry()
  f2fs: Pass a folio to f2fs_delete_inline_entry()
  f2fs: Pass a folio to f2fs_recover_inline_data()
  f2fs: Pass a folio to __recover_inline_status()
  f2fs: Pass a folio to inline_data_addr()
  f2fs: Convert f2fs_put_page_dic() to f2fs_put_folio_dic()
  f2fs: Pass a folio to f2fs_set_link()
  f2fs: Use a folio in need_inode_page_update()
  f2fs: Use a folio in f2fs_truncate_meta_inode_pages()
  f2fs: Use a folio in f2fs_cache_compressed_page()
  f2fs: Use a folio in prepare_compress_overwrite()
  f2fs: Convert f2fs_load_compressed_page() to
    f2fs_load_compressed_folio()
  f2fs: Use a folio in f2fs_encrypt_one_page()
  f2fs: Use a folio in redirty_blocks()
  f2fs: Use a folio in f2fs_wait_on_block_writeback()
  f2fs: Pass a folio to f2fs_init_read_extent_tree()
  f2fs: Return a folio from f2fs_init_inode_metadata()
  f2fs: Pass a folio to f2fs_update_inode()
  f2fs: Pass a folio to set_nid()
  f2fs: Convert dnode_of_data->node_page to node_folio
  f2fs: Pass a folio to get_dnode_addr()
  f2fs: Convert fsync_node_entry->page to folio
  f2fs: Remove f2fs_new_node_page()
  f2fs: Use a folio in flush_inline_data()
  f2fs: Convert clear_node_page_dirty() to clear_node_folio_dirty()

 fs/f2fs/acl.c           |  33 ++-
 fs/f2fs/acl.h           |  10 +-
 fs/f2fs/checkpoint.c    | 193 +++++++--------
 fs/f2fs/compress.c      | 134 +++++-----
 fs/f2fs/data.c          | 208 ++++++++--------
 fs/f2fs/dir.c           | 240 +++++++++---------
 fs/f2fs/extent_cache.c  |  10 +-
 fs/f2fs/f2fs.h          | 184 +++++++-------
 fs/f2fs/file.c          | 155 ++++++------
 fs/f2fs/gc.c            | 140 ++++++-----
 fs/f2fs/inline.c        | 306 +++++++++++------------
 fs/f2fs/inode.c         |  94 +++----
 fs/f2fs/namei.c         | 112 ++++-----
 fs/f2fs/node.c          | 526 ++++++++++++++++++++--------------------
 fs/f2fs/node.h          |  12 +-
 fs/f2fs/recovery.c      | 178 +++++++-------
 fs/f2fs/segment.c       | 147 ++++++-----
 fs/f2fs/segment.h       |   6 +-
 fs/f2fs/super.c         |  36 ++-
 fs/f2fs/xattr.c         | 116 ++++-----
 fs/f2fs/xattr.h         |  24 +-
 include/linux/highmem.h |  27 +++
 22 files changed, 1444 insertions(+), 1447 deletions(-)

-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 001/153] f2fs: Use a folio in f2fs_compress_free_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 002/153] f2fs: Use a folio in f2fs_write_raw_pages() Matthew Wilcox (Oracle)
                   ` (153 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert the incoming page to a folio and operate on it.  Removes a
reference to page->mapping which is going away soon.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 9b94810675c1..9eecc167b1fc 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -593,11 +593,14 @@ static struct page *f2fs_compress_alloc_page(void)
 
 static void f2fs_compress_free_page(struct page *page)
 {
+	struct folio *folio;
+
 	if (!page)
 		return;
-	detach_page_private(page);
-	page->mapping = NULL;
-	unlock_page(page);
+	folio = page_folio(page);
+	folio_detach_private(folio);
+	folio->mapping = NULL;
+	folio_unlock(folio);
 	mempool_free(page, compress_page_pool);
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 002/153] f2fs: Use a folio in f2fs_write_raw_pages()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 001/153] f2fs: Use a folio in f2fs_compress_free_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 003/153] f2fs: Introduce fio_inode() Matthew Wilcox (Oracle)
                   ` (152 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert each page in rpages to a folio before operating on it.  Replaces
eight calls to compound_head() with one and removes a reference to
page->mapping which is going away soon.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 9eecc167b1fc..668c04e93a95 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1532,37 +1532,39 @@ static int f2fs_write_raw_pages(struct compress_ctx *cc,
 		f2fs_lock_op(sbi);
 
 	for (i = 0; i < cc->cluster_size; i++) {
+		struct folio *folio;
+
 		if (!cc->rpages[i])
 			continue;
+		folio = page_folio(cc->rpages[i]);
 retry_write:
-		lock_page(cc->rpages[i]);
+		folio_lock(folio);
 
-		if (cc->rpages[i]->mapping != mapping) {
+		if (folio->mapping != mapping) {
 continue_unlock:
-			unlock_page(cc->rpages[i]);
+			folio_unlock(folio);
 			continue;
 		}
 
-		if (!PageDirty(cc->rpages[i]))
+		if (!folio_test_dirty(folio))
 			goto continue_unlock;
 
-		if (folio_test_writeback(page_folio(cc->rpages[i]))) {
+		if (folio_test_writeback(folio)) {
 			if (wbc->sync_mode == WB_SYNC_NONE)
 				goto continue_unlock;
-			f2fs_wait_on_page_writeback(cc->rpages[i], DATA, true, true);
+			f2fs_folio_wait_writeback(folio, DATA, true, true);
 		}
 
-		if (!clear_page_dirty_for_io(cc->rpages[i]))
+		if (!folio_clear_dirty_for_io(folio))
 			goto continue_unlock;
 
 		submitted = 0;
-		ret = f2fs_write_single_data_page(page_folio(cc->rpages[i]),
-						&submitted,
+		ret = f2fs_write_single_data_page(folio, &submitted,
 						NULL, NULL, wbc, io_type,
 						compr_blocks, false);
 		if (ret) {
 			if (ret == AOP_WRITEPAGE_ACTIVATE) {
-				unlock_page(cc->rpages[i]);
+				folio_unlock(folio);
 				ret = 0;
 			} else if (ret == -EAGAIN) {
 				ret = 0;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 003/153] f2fs: Introduce fio_inode()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 001/153] f2fs: Use a folio in f2fs_compress_free_page() Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 002/153] f2fs: Use a folio in f2fs_write_raw_pages() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-04-15 19:22   ` Jaegeuk Kim via Linux-f2fs-devel
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 004/153] f2fs: Use F2FS_P_SB() in f2fs_is_compressed_page() Matthew Wilcox (Oracle)
                   ` (151 subsequent siblings)
  154 siblings, 1 reply; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

This helper returns the inode associated with the f2fs_io_info.  That's a
relatively common thing to want, mildly awkward to get and provides one
place to change if we decide to record it directly, or change fio->page
to fio->folio.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c    | 9 +++++----
 fs/f2fs/f2fs.h    | 5 +++++
 fs/f2fs/segment.c | 6 +++---
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 54f89f0ee69b..597d1e82cb55 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -946,6 +946,7 @@ static bool is_end_zone_blkaddr(struct f2fs_sb_info *sbi, block_t blkaddr)
 
 void f2fs_submit_page_write(struct f2fs_io_info *fio)
 {
+	struct inode *inode = fio_inode(fio);
 	struct f2fs_sb_info *sbi = fio->sbi;
 	enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
 	struct f2fs_bio_info *io = sbi->write_io[btype] + fio->temp;
@@ -995,13 +996,13 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
 	if (io->bio &&
 	    (!io_is_mergeable(sbi, io->bio, io, fio, io->last_block_in_bio,
 			      fio->new_blkaddr) ||
-	     !f2fs_crypt_mergeable_bio(io->bio, fio->page->mapping->host,
+	     !f2fs_crypt_mergeable_bio(io->bio, inode,
 				page_folio(bio_page)->index, fio)))
 		__submit_merged_bio(io);
 alloc_new:
 	if (io->bio == NULL) {
 		io->bio = __bio_alloc(fio, BIO_MAX_VECS);
-		f2fs_set_bio_crypt_ctx(io->bio, fio->page->mapping->host,
+		f2fs_set_bio_crypt_ctx(io->bio, inode,
 				page_folio(bio_page)->index, fio, GFP_NOIO);
 		io->fio = *fio;
 	}
@@ -2501,7 +2502,7 @@ static void f2fs_readahead(struct readahead_control *rac)
 
 int f2fs_encrypt_one_page(struct f2fs_io_info *fio)
 {
-	struct inode *inode = fio->page->mapping->host;
+	struct inode *inode = fio_inode(fio);
 	struct page *mpage, *page;
 	gfp_t gfp_flags = GFP_NOFS;
 
@@ -2631,7 +2632,7 @@ bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio)
 
 static inline bool need_inplace_update(struct f2fs_io_info *fio)
 {
-	struct inode *inode = fio->page->mapping->host;
+	struct inode *inode = fio_inode(fio);
 
 	if (f2fs_should_update_outplace(inode, fio))
 		return false;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index f1576dc6ec67..c37092e82354 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3858,6 +3858,11 @@ unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
 unsigned long long f2fs_get_section_mtime(struct f2fs_sb_info *sbi,
 			unsigned int segno);
 
+static inline struct inode *fio_inode(struct f2fs_io_info *fio)
+{
+	return page_folio(fio->page)->mapping->host;
+}
+
 #define DEF_FRAGMENT_SIZE	4
 #define MIN_FRAGMENT_SIZE	1
 #define MAX_FRAGMENT_SIZE	512
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 396ef71f41e3..d2f2f68da098 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -3584,7 +3584,7 @@ static int __get_segment_type_2(struct f2fs_io_info *fio)
 static int __get_segment_type_4(struct f2fs_io_info *fio)
 {
 	if (fio->type == DATA) {
-		struct inode *inode = fio->page->mapping->host;
+		struct inode *inode = fio_inode(fio);
 
 		if (S_ISDIR(inode->i_mode))
 			return CURSEG_HOT_DATA;
@@ -3618,7 +3618,7 @@ static int __get_age_segment_type(struct inode *inode, pgoff_t pgofs)
 static int __get_segment_type_6(struct f2fs_io_info *fio)
 {
 	if (fio->type == DATA) {
-		struct inode *inode = fio->page->mapping->host;
+		struct inode *inode = fio_inode(fio);
 		int type;
 
 		if (is_inode_flag_set(inode, FI_ALIGNED_WRITE))
@@ -4023,7 +4023,7 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio)
 	if (!err) {
 		f2fs_update_device_state(fio->sbi, fio->ino,
 						fio->new_blkaddr, 1);
-		f2fs_update_iostat(fio->sbi, fio->page->mapping->host,
+		f2fs_update_iostat(fio->sbi, fio_inode(fio),
 						fio->io_type, F2FS_BLKSIZE);
 	}
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 004/153] f2fs: Use F2FS_P_SB() in f2fs_is_compressed_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (2 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 003/153] f2fs: Introduce fio_inode() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 005/153] f2fs: Use bio_for_each_folio_all() in __has_merged_page() Matthew Wilcox (Oracle)
                   ` (150 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a reference to page->mapping which is going away soon.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 668c04e93a95..a01567bbcd33 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -82,7 +82,7 @@ bool f2fs_is_compressed_page(struct page *page)
 	if (page_private_nonpointer(page))
 		return false;
 
-	f2fs_bug_on(F2FS_M_SB(page->mapping),
+	f2fs_bug_on(F2FS_P_SB(page),
 		*((u32 *)page_private(page)) != F2FS_COMPRESSED_PAGE_MAGIC);
 	return true;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 005/153] f2fs: Use bio_for_each_folio_all() in __has_merged_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (3 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 004/153] f2fs: Use F2FS_P_SB() in f2fs_is_compressed_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 006/153] f2fs: Use a folio in add_ipu_page() Matthew Wilcox (Oracle)
                   ` (149 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Iterate over each folio rather than each page.  Convert
f2fs_compress_control_page() to f2fs_compress_control_folio() since
this is the only caller.  Removes a reference to page->mapping which
is going away soon as well as calls to fscrypt_is_bounce_page() and
fscrypt_pagecache_page().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c |  6 ++++--
 fs/f2fs/data.c     | 19 +++++++++----------
 fs/f2fs/f2fs.h     |  4 ++--
 3 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index a01567bbcd33..a4cd957f6ade 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -137,9 +137,11 @@ static void f2fs_put_rpages_wbc(struct compress_ctx *cc,
 	}
 }
 
-struct page *f2fs_compress_control_page(struct page *page)
+struct folio *f2fs_compress_control_folio(struct folio *folio)
 {
-	return ((struct compress_io_ctx *)page_private(page))->rpages[0];
+	struct compress_io_ctx *ctx = folio->private;
+
+	return page_folio(ctx->rpages[0]);
 }
 
 int f2fs_init_compress_ctx(struct compress_ctx *cc)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 597d1e82cb55..70dab1b6fdf4 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -548,8 +548,7 @@ static void __submit_merged_bio(struct f2fs_bio_info *io)
 static bool __has_merged_page(struct bio *bio, struct inode *inode,
 						struct page *page, nid_t ino)
 {
-	struct bio_vec *bvec;
-	struct bvec_iter_all iter_all;
+	struct folio_iter fi;
 
 	if (!bio)
 		return false;
@@ -557,25 +556,25 @@ static bool __has_merged_page(struct bio *bio, struct inode *inode,
 	if (!inode && !page && !ino)
 		return true;
 
-	bio_for_each_segment_all(bvec, bio, iter_all) {
-		struct page *target = bvec->bv_page;
+	bio_for_each_folio_all(fi, bio) {
+		struct folio *target = fi.folio;
 
-		if (fscrypt_is_bounce_page(target)) {
-			target = fscrypt_pagecache_page(target);
+		if (fscrypt_is_bounce_folio(target)) {
+			target = fscrypt_pagecache_folio(target);
 			if (IS_ERR(target))
 				continue;
 		}
-		if (f2fs_is_compressed_page(target)) {
-			target = f2fs_compress_control_page(target);
+		if (f2fs_is_compressed_page(&target->page)) {
+			target = f2fs_compress_control_folio(target);
 			if (IS_ERR(target))
 				continue;
 		}
 
 		if (inode && inode == target->mapping->host)
 			return true;
-		if (page && page == target)
+		if (page && page == &target->page)
 			return true;
-		if (ino && ino == ino_of_node(target))
+		if (ino && ino == ino_of_node(&target->page))
 			return true;
 	}
 
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index c37092e82354..443c9d27e5b6 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4428,7 +4428,7 @@ enum cluster_check_type {
 	CLUSTER_RAW_BLKS    /* return # of raw blocks in a cluster */
 };
 bool f2fs_is_compressed_page(struct page *page);
-struct page *f2fs_compress_control_page(struct page *page);
+struct folio *f2fs_compress_control_folio(struct folio *folio);
 int f2fs_prepare_compress_overwrite(struct inode *inode,
 			struct page **pagep, pgoff_t index, void **fsdata);
 bool f2fs_compress_write_end(struct inode *inode, void *fsdata,
@@ -4505,7 +4505,7 @@ static inline bool f2fs_is_compress_backend_ready(struct inode *inode)
 	return false;
 }
 static inline bool f2fs_is_compress_level_valid(int alg, int lvl) { return false; }
-static inline struct page *f2fs_compress_control_page(struct page *page)
+static inline struct folio *f2fs_compress_control_folio(struct folio *folio)
 {
 	WARN_ON_ONCE(1);
 	return ERR_PTR(-EINVAL);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 006/153] f2fs: Use a folio in add_ipu_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (4 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 005/153] f2fs: Use bio_for_each_folio_all() in __has_merged_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 007/153] f2fs: Remove access to page->mapping in f2fs_is_cp_guaranteed() Matthew Wilcox (Oracle)
                   ` (148 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert the incoming page to a folio at the start, then use the
folio later in the function.  Moves a call to page_folio() earlier,
and removes an access to page->mapping.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 70dab1b6fdf4..8d25af7a4cfd 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -779,6 +779,7 @@ static void del_bio_entry(struct bio_entry *be)
 static int add_ipu_page(struct f2fs_io_info *fio, struct bio **bio,
 							struct page *page)
 {
+	struct folio *fio_folio = page_folio(fio->page);
 	struct f2fs_sb_info *sbi = fio->sbi;
 	enum temp_type temp;
 	bool found = false;
@@ -800,8 +801,8 @@ static int add_ipu_page(struct f2fs_io_info *fio, struct bio **bio,
 							    *fio->last_block,
 							    fio->new_blkaddr));
 			if (f2fs_crypt_mergeable_bio(*bio,
-					fio->page->mapping->host,
-					page_folio(fio->page)->index, fio) &&
+					fio_folio->mapping->host,
+					fio_folio->index, fio) &&
 			    bio_add_page(*bio, page, PAGE_SIZE, 0) ==
 					PAGE_SIZE) {
 				ret = 0;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 007/153] f2fs: Remove access to page->mapping in f2fs_is_cp_guaranteed()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (5 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 006/153] f2fs: Use a folio in add_ipu_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 008/153] f2fs: Use a folio in move_data_block() Matthew Wilcox (Oracle)
                   ` (147 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

page->mapping will be removed soon, so call page_folio() on the
page that was passed in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 8d25af7a4cfd..e668497ed3fc 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -49,7 +49,7 @@ void f2fs_destroy_bioset(void)
 
 bool f2fs_is_cp_guaranteed(struct page *page)
 {
-	struct address_space *mapping = page->mapping;
+	struct address_space *mapping = page_folio(page)->mapping;
 	struct inode *inode;
 	struct f2fs_sb_info *sbi;
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 008/153] f2fs: Use a folio in move_data_block()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (6 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 007/153] f2fs: Remove access to page->mapping in f2fs_is_cp_guaranteed() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-04-27  9:31   ` Chao Yu via Linux-f2fs-devel
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 009/153] f2fs: Use a folio in f2fs_quota_read() Matthew Wilcox (Oracle)
                   ` (146 subsequent siblings)
  154 siblings, 1 reply; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Fetch a folio from the pagecache instead of a page and operate on it
throughout.  Removes eight calls to compound_head() and an access to
page->mapping.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/gc.c | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 2b8f9239bede..fa51b871290d 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1307,7 +1307,8 @@ static int move_data_block(struct inode *inode, block_t bidx,
 	struct dnode_of_data dn;
 	struct f2fs_summary sum;
 	struct node_info ni;
-	struct page *page, *mpage;
+	struct page *page;
+	struct folio *mfolio;
 	block_t newaddr;
 	int err = 0;
 	bool lfs_mode = f2fs_lfs_mode(fio.sbi);
@@ -1359,20 +1360,20 @@ static int move_data_block(struct inode *inode, block_t bidx,
 	if (lfs_mode)
 		f2fs_down_write(&fio.sbi->io_order_lock);
 
-	mpage = f2fs_grab_cache_page(META_MAPPING(fio.sbi),
+	mfolio = f2fs_grab_cache_folio(META_MAPPING(fio.sbi),
 					fio.old_blkaddr, false);
-	if (!mpage) {
-		err = -ENOMEM;
+	if (IS_ERR(mfolio)) {
+		err = PTR_ERR(mfolio);
 		goto up_out;
 	}
 
-	fio.encrypted_page = mpage;
+	fio.encrypted_page = folio_file_page(mfolio, fio.old_blkaddr);
 
-	/* read source block in mpage */
-	if (!PageUptodate(mpage)) {
+	/* read source block in mfolio */
+	if (!folio_test_uptodate(mfolio)) {
 		err = f2fs_submit_page_bio(&fio);
 		if (err) {
-			f2fs_put_page(mpage, 1);
+			f2fs_folio_put(mfolio, true);
 			goto up_out;
 		}
 
@@ -1381,11 +1382,11 @@ static int move_data_block(struct inode *inode, block_t bidx,
 		f2fs_update_iostat(fio.sbi, NULL, FS_GDATA_READ_IO,
 							F2FS_BLKSIZE);
 
-		lock_page(mpage);
-		if (unlikely(mpage->mapping != META_MAPPING(fio.sbi) ||
-						!PageUptodate(mpage))) {
+		folio_lock(mfolio);
+		if (unlikely(mfolio->mapping != META_MAPPING(fio.sbi) ||
+			     !folio_test_uptodate(mfolio))) {
 			err = -EIO;
-			f2fs_put_page(mpage, 1);
+			f2fs_folio_put(mfolio, 1);
 			goto up_out;
 		}
 	}
@@ -1396,7 +1397,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 	err = f2fs_allocate_data_block(fio.sbi, NULL, fio.old_blkaddr, &newaddr,
 				&sum, type, NULL);
 	if (err) {
-		f2fs_put_page(mpage, 1);
+		f2fs_folio_put(mfolio, true);
 		/* filesystem should shutdown, no need to recovery block */
 		goto up_out;
 	}
@@ -1405,15 +1406,15 @@ static int move_data_block(struct inode *inode, block_t bidx,
 				newaddr, FGP_LOCK | FGP_CREAT, GFP_NOFS);
 	if (!fio.encrypted_page) {
 		err = -ENOMEM;
-		f2fs_put_page(mpage, 1);
+		f2fs_folio_put(mfolio, true);
 		goto recover_block;
 	}
 
 	/* write target block */
 	f2fs_wait_on_page_writeback(fio.encrypted_page, DATA, true, true);
 	memcpy(page_address(fio.encrypted_page),
-				page_address(mpage), PAGE_SIZE);
-	f2fs_put_page(mpage, 1);
+				folio_address(mfolio), PAGE_SIZE);
+	f2fs_folio_put(mfolio, true);
 
 	f2fs_invalidate_internal_cache(fio.sbi, fio.old_blkaddr, 1);
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 009/153] f2fs: Use a folio in f2fs_quota_read()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (7 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 008/153] f2fs: Use a folio in move_data_block() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-04-27 11:02   ` Chao Yu via Linux-f2fs-devel
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 010/153] f2fs: Add f2fs_grab_meta_folio() Matthew Wilcox (Oracle)
                   ` (145 subsequent siblings)
  154 siblings, 1 reply; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Support arbitrary size folios and remove a few hidden calls to
compound_head().  Also remove an unnecessary test of the uptodaate flag;
if mapping_read_folio_gfp() cannot bring the folio uptodate, it will
return an error.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/super.c | 36 ++++++++++++++++--------------------
 1 file changed, 16 insertions(+), 20 deletions(-)

diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index f087b2b71c89..fd93581bee89 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -2689,12 +2689,9 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
 {
 	struct inode *inode = sb_dqopt(sb)->files[type];
 	struct address_space *mapping = inode->i_mapping;
-	block_t blkidx = F2FS_BYTES_TO_BLK(off);
-	int offset = off & (sb->s_blocksize - 1);
 	int tocopy;
 	size_t toread;
 	loff_t i_size = i_size_read(inode);
-	struct page *page;
 
 	if (off > i_size)
 		return 0;
@@ -2703,37 +2700,36 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
 		len = i_size - off;
 	toread = len;
 	while (toread > 0) {
-		tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread);
+		struct folio *folio;
+		size_t offset;
+
 repeat:
-		page = read_cache_page_gfp(mapping, blkidx, GFP_NOFS);
-		if (IS_ERR(page)) {
-			if (PTR_ERR(page) == -ENOMEM) {
+		folio = mapping_read_folio_gfp(mapping, off >> PAGE_SHIFT,
+				GFP_NOFS);
+		if (IS_ERR(folio)) {
+			if (PTR_ERR(folio) == -ENOMEM) {
 				memalloc_retry_wait(GFP_NOFS);
 				goto repeat;
 			}
 			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
-			return PTR_ERR(page);
+			return PTR_ERR(folio);
 		}
+		offset = offset_in_folio(folio, off);
+		tocopy = min(folio_size(folio) - offset, toread);
 
-		lock_page(page);
+		folio_lock(folio);
 
-		if (unlikely(page->mapping != mapping)) {
-			f2fs_put_page(page, 1);
+		if (unlikely(folio->mapping != mapping)) {
+			f2fs_folio_put(folio, true);
 			goto repeat;
 		}
-		if (unlikely(!PageUptodate(page))) {
-			f2fs_put_page(page, 1);
-			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
-			return -EIO;
-		}
 
-		memcpy_from_page(data, page, offset, tocopy);
-		f2fs_put_page(page, 1);
+		memcpy_from_folio(data, folio, offset, tocopy);
+		f2fs_folio_put(folio, true);
 
-		offset = 0;
 		toread -= tocopy;
 		data += tocopy;
-		blkidx++;
+		off += tocopy;
 	}
 	return len;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 010/153] f2fs: Add f2fs_grab_meta_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (8 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 009/153] f2fs: Use a folio in f2fs_quota_read() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 011/153] f2fs: Use a folio in commit_checkpoint() Matthew Wilcox (Oracle)
                   ` (144 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Turn f2fs_grab_meta_page() into a wrapper around f2fs_grab_meta_folio().
Saves three hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 16 ++++++++--------
 fs/f2fs/f2fs.h       |  8 +++++++-
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index cf77987d0698..bb4a2af73103 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -38,20 +38,20 @@ void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
 /*
  * We guarantee no failure on the returned page.
  */
-struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
+struct folio *f2fs_grab_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index)
 {
 	struct address_space *mapping = META_MAPPING(sbi);
-	struct page *page;
+	struct folio *folio;
 repeat:
-	page = f2fs_grab_cache_page(mapping, index, false);
-	if (!page) {
+	folio = f2fs_grab_cache_folio(mapping, index, false);
+	if (IS_ERR(folio)) {
 		cond_resched();
 		goto repeat;
 	}
-	f2fs_wait_on_page_writeback(page, META, true, true);
-	if (!PageUptodate(page))
-		SetPageUptodate(page);
-	return page;
+	f2fs_folio_wait_writeback(folio, META, true, true);
+	if (!folio_test_uptodate(folio))
+		folio_mark_uptodate(folio);
+	return folio;
 }
 
 static struct page *__get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index,
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 443c9d27e5b6..c8965fdcf3cb 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3879,7 +3879,7 @@ static inline bool f2fs_need_rand_seg(struct f2fs_sb_info *sbi)
 void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
 							unsigned char reason);
 void f2fs_flush_ckpt_thread(struct f2fs_sb_info *sbi);
-struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
+struct folio *f2fs_grab_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index);
 struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
 struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index);
 struct page *f2fs_get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index);
@@ -3922,6 +3922,12 @@ int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi);
 void f2fs_stop_ckpt_thread(struct f2fs_sb_info *sbi);
 void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
 
+static inline
+struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
+{
+	return &f2fs_grab_meta_folio(sbi, index)->page;
+}
+
 /*
  * data.c
  */
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 011/153] f2fs: Use a folio in commit_checkpoint()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (9 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 010/153] f2fs: Add f2fs_grab_meta_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 012/153] f2fs: Convert __f2fs_write_meta_page() to __f2fs_write_meta_folio() Matthew Wilcox (Oracle)
                   ` (143 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Save four calls to compound_head().  Also remove the call
to f2fs_wait_on_page_writeback() as this was already done by
f2fs_grab_meta_folio() and writeback can't have restarted in the
meantime since we hold the folio locked.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index bb4a2af73103..6e25975950fa 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -1407,30 +1407,28 @@ static void commit_checkpoint(struct f2fs_sb_info *sbi,
 	};
 
 	/*
-	 * filemap_get_folios_tag and lock_page again will take
+	 * filemap_get_folios_tag and folio_lock again will take
 	 * some extra time. Therefore, f2fs_update_meta_pages and
 	 * f2fs_sync_meta_pages are combined in this function.
 	 */
-	struct page *page = f2fs_grab_meta_page(sbi, blk_addr);
+	struct folio *folio = f2fs_grab_meta_folio(sbi, blk_addr);
 	int err;
 
-	f2fs_wait_on_page_writeback(page, META, true, true);
+	memcpy(folio_address(folio), src, PAGE_SIZE);
 
-	memcpy(page_address(page), src, PAGE_SIZE);
-
-	set_page_dirty(page);
-	if (unlikely(!clear_page_dirty_for_io(page)))
+	folio_mark_dirty(folio);
+	if (unlikely(!folio_clear_dirty_for_io(folio)))
 		f2fs_bug_on(sbi, 1);
 
 	/* writeout cp pack 2 page */
-	err = __f2fs_write_meta_page(page, &wbc, FS_CP_META_IO);
+	err = __f2fs_write_meta_page(&folio->page, &wbc, FS_CP_META_IO);
 	if (unlikely(err && f2fs_cp_error(sbi))) {
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 		return;
 	}
 
 	f2fs_bug_on(sbi, err);
-	f2fs_put_page(page, 0);
+	f2fs_folio_put(folio, false);
 
 	/* submit checkpoint (with barrier if NOBARRIER is not set) */
 	f2fs_submit_merged_write(sbi, META_FLUSH);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 012/153] f2fs: Convert __f2fs_write_meta_page() to __f2fs_write_meta_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (10 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 011/153] f2fs: Use a folio in commit_checkpoint() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 013/153] f2fs: Use f2fs_folio_wait_writeback() Matthew Wilcox (Oracle)
                   ` (142 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers now have a folio so pass it in.  Saves three hidden calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 6e25975950fa..fdc310e9f261 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -340,12 +340,11 @@ void f2fs_ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index,
 		f2fs_ra_meta_pages(sbi, index, ra_blocks, META_POR, true);
 }
 
-static int __f2fs_write_meta_page(struct page *page,
+static int __f2fs_write_meta_folio(struct folio *folio,
 				struct writeback_control *wbc,
 				enum iostat_type io_type)
 {
-	struct f2fs_sb_info *sbi = F2FS_P_SB(page);
-	struct folio *folio = page_folio(page);
+	struct f2fs_sb_info *sbi = F2FS_F_SB(folio);
 
 	trace_f2fs_writepage(folio, META);
 
@@ -367,7 +366,7 @@ static int __f2fs_write_meta_page(struct page *page,
 	dec_page_count(sbi, F2FS_DIRTY_META);
 
 	if (wbc->for_reclaim)
-		f2fs_submit_merged_write_cond(sbi, NULL, page, 0, META);
+		f2fs_submit_merged_write_cond(sbi, NULL, &folio->page, 0, META);
 
 	folio_unlock(folio);
 
@@ -377,7 +376,7 @@ static int __f2fs_write_meta_page(struct page *page,
 	return 0;
 
 redirty_out:
-	redirty_page_for_writepage(wbc, page);
+	folio_redirty_for_writepage(wbc, folio);
 	return AOP_WRITEPAGE_ACTIVATE;
 }
 
@@ -463,7 +462,7 @@ long f2fs_sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
 			if (!folio_clear_dirty_for_io(folio))
 				goto continue_unlock;
 
-			if (__f2fs_write_meta_page(&folio->page, &wbc,
+			if (__f2fs_write_meta_folio(folio, &wbc,
 						io_type)) {
 				folio_unlock(folio);
 				break;
@@ -1421,7 +1420,7 @@ static void commit_checkpoint(struct f2fs_sb_info *sbi,
 		f2fs_bug_on(sbi, 1);
 
 	/* writeout cp pack 2 page */
-	err = __f2fs_write_meta_page(&folio->page, &wbc, FS_CP_META_IO);
+	err = __f2fs_write_meta_folio(folio, &wbc, FS_CP_META_IO);
 	if (unlikely(err && f2fs_cp_error(sbi))) {
 		f2fs_folio_put(folio, true);
 		return;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 013/153] f2fs: Use f2fs_folio_wait_writeback()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (11 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 012/153] f2fs: Convert __f2fs_write_meta_page() to __f2fs_write_meta_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 014/153] f2fs: Pass a folio to f2fs_submit_merged_ipu_write() Matthew Wilcox (Oracle)
                   ` (141 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

There were some missing conversions from f2fs_wait_on_page_writeback()
to f2fs_folio_wait_writeback().  Saves a call to compound_head() at each
callsite.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 3 +--
 fs/f2fs/data.c       | 4 ++--
 fs/f2fs/file.c       | 2 +-
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index fdc310e9f261..55fcb9869531 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -456,8 +456,7 @@ long f2fs_sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
 				goto continue_unlock;
 			}
 
-			f2fs_wait_on_page_writeback(&folio->page, META,
-					true, true);
+			f2fs_folio_wait_writeback(folio, META, true, true);
 
 			if (!folio_clear_dirty_for_io(folio))
 				goto continue_unlock;
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index e668497ed3fc..e6921a53c7a1 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -3129,7 +3129,7 @@ static int f2fs_write_cache_pages(struct address_space *mapping,
 			if (folio_test_writeback(folio)) {
 				if (wbc->sync_mode == WB_SYNC_NONE)
 					goto continue_unlock;
-				f2fs_wait_on_page_writeback(&folio->page, DATA, true, true);
+				f2fs_folio_wait_writeback(folio, DATA, true, true);
 			}
 
 			if (!folio_clear_dirty_for_io(folio))
@@ -3624,7 +3624,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
 		}
 	}
 
-	f2fs_wait_on_page_writeback(&folio->page, DATA, false, true);
+	f2fs_folio_wait_writeback(folio, DATA, false, true);
 
 	if (len == folio_size(folio) || folio_test_uptodate(folio))
 		return 0;
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index abbcbb5865a3..25f69a308dde 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -131,7 +131,7 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
 		goto out_sem;
 	}
 
-	f2fs_wait_on_page_writeback(folio_page(folio, 0), DATA, false, true);
+	f2fs_folio_wait_writeback(folio, DATA, false, true);
 
 	/* wait for GCed page writeback via META_MAPPING */
 	f2fs_wait_on_block_writeback(inode, dn.data_blkaddr);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 014/153] f2fs: Pass a folio to f2fs_submit_merged_ipu_write()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (12 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 013/153] f2fs: Use f2fs_folio_wait_writeback() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 015/153] f2fs: Convert __get_meta_page() to __get_meta_folio() Matthew Wilcox (Oracle)
                   ` (140 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller which passes a page already has a folio, so pass
it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c    | 8 ++++----
 fs/f2fs/f2fs.h    | 2 +-
 fs/f2fs/segment.c | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index e6921a53c7a1..23e37207ed90 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -826,13 +826,13 @@ static int add_ipu_page(struct f2fs_io_info *fio, struct bio **bio,
 }
 
 void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
-					struct bio **bio, struct page *page)
+					struct bio **bio, struct folio *folio)
 {
 	enum temp_type temp;
 	bool found = false;
 	struct bio *target = bio ? *bio : NULL;
 
-	f2fs_bug_on(sbi, !target && !page);
+	f2fs_bug_on(sbi, !target && !folio);
 
 	for (temp = HOT; temp < NR_TEMP_TYPE && !found; temp++) {
 		struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
@@ -848,7 +848,7 @@ void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
 				found = (target == be->bio);
 			else
 				found = __has_merged_page(be->bio, NULL,
-								page, 0);
+							&folio->page, 0);
 			if (found)
 				break;
 		}
@@ -865,7 +865,7 @@ void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
 				found = (target == be->bio);
 			else
 				found = __has_merged_page(be->bio, NULL,
-								page, 0);
+							&folio->page, 0);
 			if (found) {
 				target = be->bio;
 				del_bio_entry(be);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index c8965fdcf3cb..4a30ded147e2 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3944,7 +3944,7 @@ void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
 				struct inode *inode, struct page *page,
 				nid_t ino, enum page_type type);
 void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
-					struct bio **bio, struct page *page);
+					struct bio **bio, struct folio *folio);
 void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi);
 int f2fs_submit_page_bio(struct f2fs_io_info *fio);
 int f2fs_merge_page_bio(struct f2fs_io_info *fio);
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index d2f2f68da098..8476419db9e4 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -4165,7 +4165,7 @@ void f2fs_folio_wait_writeback(struct folio *folio, enum page_type type,
 		/* submit cached LFS IO */
 		f2fs_submit_merged_write_cond(sbi, NULL, &folio->page, 0, type);
 		/* submit cached IPU IO */
-		f2fs_submit_merged_ipu_write(sbi, NULL, &folio->page);
+		f2fs_submit_merged_ipu_write(sbi, NULL, folio);
 		if (ordered) {
 			folio_wait_writeback(folio);
 			f2fs_bug_on(sbi, locked && folio_test_writeback(folio));
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 015/153] f2fs: Convert __get_meta_page() to __get_meta_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (13 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 014/153] f2fs: Pass a folio to f2fs_submit_merged_ipu_write() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 016/153] f2fs: Convert f2fs_get_tmp_page() to f2fs_get_tmp_folio() Matthew Wilcox (Oracle)
                   ` (139 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Push the conversion to a page into the callers.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 55fcb9869531..1274b66ab5fc 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -54,7 +54,7 @@ struct folio *f2fs_grab_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index)
 	return folio;
 }
 
-static struct page *__get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index,
+static struct folio *__get_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index,
 							bool is_meta)
 {
 	struct address_space *mapping = META_MAPPING(sbi);
@@ -104,34 +104,34 @@ static struct page *__get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index,
 		return ERR_PTR(-EIO);
 	}
 out:
-	return &folio->page;
+	return folio;
 }
 
 struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
 {
-	return __get_meta_page(sbi, index, true);
+	return &__get_meta_folio(sbi, index, true)->page;
 }
 
 struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index)
 {
-	struct page *page;
+	struct folio *folio;
 	int count = 0;
 
 retry:
-	page = __get_meta_page(sbi, index, true);
-	if (IS_ERR(page)) {
-		if (PTR_ERR(page) == -EIO &&
+	folio = __get_meta_folio(sbi, index, true);
+	if (IS_ERR(folio)) {
+		if (PTR_ERR(folio) == -EIO &&
 				++count <= DEFAULT_RETRY_IO_COUNT)
 			goto retry;
 		f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_META_PAGE);
 	}
-	return page;
+	return &folio->page;
 }
 
 /* for POR only */
 struct page *f2fs_get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index)
 {
-	return __get_meta_page(sbi, index, false);
+	return &__get_meta_folio(sbi, index, false)->page;
 }
 
 static bool __is_bitmap_valid(struct f2fs_sb_info *sbi, block_t blkaddr,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 016/153] f2fs: Convert f2fs_get_tmp_page() to f2fs_get_tmp_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (14 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 015/153] f2fs: Convert __get_meta_page() to __get_meta_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 017/153] f2fs: Pass a folio to next_blkaddr_of_node() Matthew Wilcox (Oracle)
                   ` (138 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert all the callers to receive a folio.  Removes a lot of
hidden calls to compound_head() in f2fs_put_page().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c |  4 +--
 fs/f2fs/f2fs.h       |  2 +-
 fs/f2fs/node.c       | 10 +++---
 fs/f2fs/recovery.c   | 86 ++++++++++++++++++++++----------------------
 4 files changed, 52 insertions(+), 50 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 1274b66ab5fc..75aad6ccd9d0 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -129,9 +129,9 @@ struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index)
 }
 
 /* for POR only */
-struct page *f2fs_get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index)
+struct folio *f2fs_get_tmp_folio(struct f2fs_sb_info *sbi, pgoff_t index)
 {
-	return &__get_meta_folio(sbi, index, false)->page;
+	return __get_meta_folio(sbi, index, false);
 }
 
 static bool __is_bitmap_valid(struct f2fs_sb_info *sbi, block_t blkaddr,
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 4a30ded147e2..3d2be01f9363 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3882,7 +3882,7 @@ void f2fs_flush_ckpt_thread(struct f2fs_sb_info *sbi);
 struct folio *f2fs_grab_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index);
 struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
 struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index);
-struct page *f2fs_get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index);
+struct folio *f2fs_get_tmp_folio(struct f2fs_sb_info *sbi, pgoff_t index);
 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
 					block_t blkaddr, int type);
 bool f2fs_is_valid_blkaddr_raw(struct f2fs_sb_info *sbi,
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 5f15c224bf78..cda6448651fa 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2902,17 +2902,17 @@ int f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
 		f2fs_ra_meta_pages(sbi, addr, nrpages, META_POR, true);
 
 		for (idx = addr; idx < addr + nrpages; idx++) {
-			struct page *page = f2fs_get_tmp_page(sbi, idx);
+			struct folio *folio = f2fs_get_tmp_folio(sbi, idx);
 
-			if (IS_ERR(page))
-				return PTR_ERR(page);
+			if (IS_ERR(folio))
+				return PTR_ERR(folio);
 
-			rn = F2FS_NODE(page);
+			rn = F2FS_NODE(&folio->page);
 			sum_entry->nid = rn->footer.nid;
 			sum_entry->version = 0;
 			sum_entry->ofs_in_node = 0;
 			sum_entry++;
-			f2fs_put_page(page, 1);
+			f2fs_folio_put(folio, true);
 		}
 
 		invalidate_mapping_pages(META_MAPPING(sbi), addr,
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 69a2027e3ebc..9848f0516a7e 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -358,33 +358,34 @@ static int sanity_check_node_chain(struct f2fs_sb_info *sbi, block_t blkaddr,
 		block_t *blkaddr_fast, bool *is_detecting)
 {
 	unsigned int ra_blocks = RECOVERY_MAX_RA_BLOCKS;
-	struct page *page = NULL;
 	int i;
 
 	if (!*is_detecting)
 		return 0;
 
 	for (i = 0; i < 2; i++) {
+		struct folio *folio;
+
 		if (!f2fs_is_valid_blkaddr(sbi, *blkaddr_fast, META_POR)) {
 			*is_detecting = false;
 			return 0;
 		}
 
-		page = f2fs_get_tmp_page(sbi, *blkaddr_fast);
-		if (IS_ERR(page))
-			return PTR_ERR(page);
+		folio = f2fs_get_tmp_folio(sbi, *blkaddr_fast);
+		if (IS_ERR(folio))
+			return PTR_ERR(folio);
 
-		if (!is_recoverable_dnode(page)) {
-			f2fs_put_page(page, 1);
+		if (!is_recoverable_dnode(&folio->page)) {
+			f2fs_folio_put(folio, true);
 			*is_detecting = false;
 			return 0;
 		}
 
 		ra_blocks = adjust_por_ra_blocks(sbi, ra_blocks, *blkaddr_fast,
-						next_blkaddr_of_node(page));
+					next_blkaddr_of_node(&folio->page));
 
-		*blkaddr_fast = next_blkaddr_of_node(page);
-		f2fs_put_page(page, 1);
+		*blkaddr_fast = next_blkaddr_of_node(&folio->page);
+		f2fs_folio_put(folio, true);
 
 		f2fs_ra_meta_pages_cond(sbi, *blkaddr_fast, ra_blocks);
 	}
@@ -401,7 +402,6 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 				bool check_only)
 {
 	struct curseg_info *curseg;
-	struct page *page = NULL;
 	block_t blkaddr, blkaddr_fast;
 	bool is_detecting = true;
 	int err = 0;
@@ -413,33 +413,35 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 
 	while (1) {
 		struct fsync_inode_entry *entry;
+		struct folio *folio;
 
 		if (!f2fs_is_valid_blkaddr(sbi, blkaddr, META_POR))
 			return 0;
 
-		page = f2fs_get_tmp_page(sbi, blkaddr);
-		if (IS_ERR(page)) {
-			err = PTR_ERR(page);
+		folio = f2fs_get_tmp_folio(sbi, blkaddr);
+		if (IS_ERR(folio)) {
+			err = PTR_ERR(folio);
 			break;
 		}
 
-		if (!is_recoverable_dnode(page)) {
-			f2fs_put_page(page, 1);
+		if (!is_recoverable_dnode(&folio->page)) {
+			f2fs_folio_put(folio, true);
 			break;
 		}
 
-		if (!is_fsync_dnode(page))
+		if (!is_fsync_dnode(&folio->page))
 			goto next;
 
-		entry = get_fsync_inode(head, ino_of_node(page));
+		entry = get_fsync_inode(head, ino_of_node(&folio->page));
 		if (!entry) {
 			bool quota_inode = false;
 
 			if (!check_only &&
-					IS_INODE(page) && is_dent_dnode(page)) {
-				err = f2fs_recover_inode_page(sbi, page);
+					IS_INODE(&folio->page) &&
+					is_dent_dnode(&folio->page)) {
+				err = f2fs_recover_inode_page(sbi, &folio->page);
 				if (err) {
-					f2fs_put_page(page, 1);
+					f2fs_folio_put(folio, true);
 					break;
 				}
 				quota_inode = true;
@@ -449,24 +451,24 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 			 * CP | dnode(F) | inode(DF)
 			 * For this case, we should not give up now.
 			 */
-			entry = add_fsync_inode(sbi, head, ino_of_node(page),
+			entry = add_fsync_inode(sbi, head, ino_of_node(&folio->page),
 								quota_inode);
 			if (IS_ERR(entry)) {
 				err = PTR_ERR(entry);
 				if (err == -ENOENT)
 					goto next;
-				f2fs_put_page(page, 1);
+				f2fs_folio_put(folio, true);
 				break;
 			}
 		}
 		entry->blkaddr = blkaddr;
 
-		if (IS_INODE(page) && is_dent_dnode(page))
+		if (IS_INODE(&folio->page) && is_dent_dnode(&folio->page))
 			entry->last_dentry = blkaddr;
 next:
 		/* check next segment */
-		blkaddr = next_blkaddr_of_node(page);
-		f2fs_put_page(page, 1);
+		blkaddr = next_blkaddr_of_node(&folio->page);
+		f2fs_folio_put(folio, true);
 
 		err = sanity_check_node_chain(sbi, blkaddr, &blkaddr_fast,
 				&is_detecting);
@@ -773,7 +775,6 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 		struct list_head *tmp_inode_list, struct list_head *dir_list)
 {
 	struct curseg_info *curseg;
-	struct page *page = NULL;
 	int err = 0;
 	block_t blkaddr;
 	unsigned int ra_blocks = RECOVERY_MAX_RA_BLOCKS;
@@ -784,22 +785,23 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 
 	while (1) {
 		struct fsync_inode_entry *entry;
+		struct folio *folio;
 
 		if (!f2fs_is_valid_blkaddr(sbi, blkaddr, META_POR))
 			break;
 
-		page = f2fs_get_tmp_page(sbi, blkaddr);
-		if (IS_ERR(page)) {
-			err = PTR_ERR(page);
+		folio = f2fs_get_tmp_folio(sbi, blkaddr);
+		if (IS_ERR(folio)) {
+			err = PTR_ERR(folio);
 			break;
 		}
 
-		if (!is_recoverable_dnode(page)) {
-			f2fs_put_page(page, 1);
+		if (!is_recoverable_dnode(&folio->page)) {
+			f2fs_folio_put(folio, true);
 			break;
 		}
 
-		entry = get_fsync_inode(inode_list, ino_of_node(page));
+		entry = get_fsync_inode(inode_list, ino_of_node(&folio->page));
 		if (!entry)
 			goto next;
 		/*
@@ -807,23 +809,23 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 		 * In this case, we can lose the latest inode(x).
 		 * So, call recover_inode for the inode update.
 		 */
-		if (IS_INODE(page)) {
-			err = recover_inode(entry->inode, page);
+		if (IS_INODE(&folio->page)) {
+			err = recover_inode(entry->inode, &folio->page);
 			if (err) {
-				f2fs_put_page(page, 1);
+				f2fs_folio_put(folio, true);
 				break;
 			}
 		}
 		if (entry->last_dentry == blkaddr) {
-			err = recover_dentry(entry->inode, page, dir_list);
+			err = recover_dentry(entry->inode, &folio->page, dir_list);
 			if (err) {
-				f2fs_put_page(page, 1);
+				f2fs_folio_put(folio, true);
 				break;
 			}
 		}
-		err = do_recover_data(sbi, entry->inode, page);
+		err = do_recover_data(sbi, entry->inode, &folio->page);
 		if (err) {
-			f2fs_put_page(page, 1);
+			f2fs_folio_put(folio, true);
 			break;
 		}
 
@@ -831,11 +833,11 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 			list_move_tail(&entry->list, tmp_inode_list);
 next:
 		ra_blocks = adjust_por_ra_blocks(sbi, ra_blocks, blkaddr,
-						next_blkaddr_of_node(page));
+					next_blkaddr_of_node(&folio->page));
 
 		/* check next segment */
-		blkaddr = next_blkaddr_of_node(page);
-		f2fs_put_page(page, 1);
+		blkaddr = next_blkaddr_of_node(&folio->page);
+		f2fs_folio_put(folio, true);
 
 		f2fs_ra_meta_pages_cond(sbi, blkaddr, ra_blocks);
 	}
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 017/153] f2fs: Pass a folio to next_blkaddr_of_node()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (15 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 016/153] f2fs: Convert f2fs_get_tmp_page() to f2fs_get_tmp_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 018/153] f2fs: Use a folio in f2fs_ra_meta_pages() Matthew Wilcox (Oracle)
                   ` (137 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Pass the folio into sanity_check_node_footer() so that we can pass
it further into next_blkaddr_of_node().  Removes a lot of conversions
from folio->page.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c     |  8 +++++---
 fs/f2fs/node.h     |  4 ++--
 fs/f2fs/recovery.c | 10 +++++-----
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index cda6448651fa..0b2e24ad620d 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1457,9 +1457,11 @@ void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
 }
 
 static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
-					struct page *page, pgoff_t nid,
+					struct folio *folio, pgoff_t nid,
 					enum node_type ntype)
 {
+	struct page *page = &folio->page;
+
 	if (unlikely(nid != nid_of_node(page) ||
 		(ntype == NODE_TYPE_INODE && !IS_INODE(page)) ||
 		(ntype == NODE_TYPE_XATTR &&
@@ -1469,7 +1471,7 @@ static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
 			  "node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]",
 			  ntype, nid, nid_of_node(page), ino_of_node(page),
 			  ofs_of_node(page), cpver_of_node(page),
-			  next_blkaddr_of_node(page));
+			  next_blkaddr_of_node(folio));
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_handle_error(sbi, ERROR_INCONSISTENT_FOOTER);
 		return -EFSCORRUPTED;
@@ -1521,7 +1523,7 @@ static struct folio *__get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid,
 		goto out_err;
 	}
 page_hit:
-	err = sanity_check_node_footer(sbi, &folio->page, nid, ntype);
+	err = sanity_check_node_footer(sbi, folio, nid, ntype);
 	if (!err)
 		return folio;
 out_err:
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 103a437e6425..c58ff16f1227 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -268,9 +268,9 @@ static inline __u64 cpver_of_node(struct page *node_page)
 	return le64_to_cpu(rn->footer.cp_ver);
 }
 
-static inline block_t next_blkaddr_of_node(struct page *node_page)
+static inline block_t next_blkaddr_of_node(struct folio *node_folio)
 {
-	struct f2fs_node *rn = F2FS_NODE(node_page);
+	struct f2fs_node *rn = F2FS_NODE(&node_folio->page);
 	return le32_to_cpu(rn->footer.next_blkaddr);
 }
 
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 9848f0516a7e..a29bd82de93b 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -382,9 +382,9 @@ static int sanity_check_node_chain(struct f2fs_sb_info *sbi, block_t blkaddr,
 		}
 
 		ra_blocks = adjust_por_ra_blocks(sbi, ra_blocks, *blkaddr_fast,
-					next_blkaddr_of_node(&folio->page));
+					next_blkaddr_of_node(folio));
 
-		*blkaddr_fast = next_blkaddr_of_node(&folio->page);
+		*blkaddr_fast = next_blkaddr_of_node(folio);
 		f2fs_folio_put(folio, true);
 
 		f2fs_ra_meta_pages_cond(sbi, *blkaddr_fast, ra_blocks);
@@ -467,7 +467,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 			entry->last_dentry = blkaddr;
 next:
 		/* check next segment */
-		blkaddr = next_blkaddr_of_node(&folio->page);
+		blkaddr = next_blkaddr_of_node(folio);
 		f2fs_folio_put(folio, true);
 
 		err = sanity_check_node_chain(sbi, blkaddr, &blkaddr_fast,
@@ -833,10 +833,10 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 			list_move_tail(&entry->list, tmp_inode_list);
 next:
 		ra_blocks = adjust_por_ra_blocks(sbi, ra_blocks, blkaddr,
-					next_blkaddr_of_node(&folio->page));
+					next_blkaddr_of_node(folio));
 
 		/* check next segment */
-		blkaddr = next_blkaddr_of_node(&folio->page);
+		blkaddr = next_blkaddr_of_node(folio);
 		f2fs_folio_put(folio, true);
 
 		f2fs_ra_meta_pages_cond(sbi, blkaddr, ra_blocks);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 018/153] f2fs: Use a folio in f2fs_ra_meta_pages()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (16 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 017/153] f2fs: Pass a folio to next_blkaddr_of_node() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 019/153] f2fs: Use a folio in f2fs_ra_meta_pages_cond() Matthew Wilcox (Oracle)
                   ` (136 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove three hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 75aad6ccd9d0..1a5fbecd9356 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -252,7 +252,6 @@ bool f2fs_is_valid_blkaddr_raw(struct f2fs_sb_info *sbi,
 int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
 							int type, bool sync)
 {
-	struct page *page;
 	block_t blkno = start;
 	struct f2fs_io_info fio = {
 		.sbi = sbi,
@@ -271,6 +270,7 @@ int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
 
 	blk_start_plug(&plug);
 	for (; nrpages-- > 0; blkno++) {
+		struct folio *folio;
 
 		if (!f2fs_is_valid_blkaddr(sbi, blkno, type))
 			goto out;
@@ -300,18 +300,18 @@ int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
 			BUG();
 		}
 
-		page = f2fs_grab_cache_page(META_MAPPING(sbi),
+		folio = f2fs_grab_cache_folio(META_MAPPING(sbi),
 						fio.new_blkaddr, false);
-		if (!page)
+		if (IS_ERR(folio))
 			continue;
-		if (PageUptodate(page)) {
-			f2fs_put_page(page, 1);
+		if (folio_test_uptodate(folio)) {
+			f2fs_folio_put(folio, true);
 			continue;
 		}
 
-		fio.page = page;
+		fio.page = &folio->page;
 		err = f2fs_submit_page_bio(&fio);
-		f2fs_put_page(page, err ? 1 : 0);
+		f2fs_folio_put(folio, err ? true : false);
 
 		if (!err)
 			f2fs_update_iostat(sbi, NULL, FS_META_READ_IO,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 019/153] f2fs: Use a folio in f2fs_ra_meta_pages_cond()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (17 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 018/153] f2fs: Use a folio in f2fs_ra_meta_pages() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-04-27 11:17   ` Chao Yu via Linux-f2fs-devel
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 020/153] f2fs: Use a folio in write_orphan_inodes() Matthew Wilcox (Oracle)
                   ` (135 subsequent siblings)
  154 siblings, 1 reply; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to find_get_page().  Saves two hidden calls to
compound_head().  Change f2fs_folio_put() to check for IS_ERR_OR_NULL
to handle the case where we got an error pointer back from
filemap_get_folio().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 8 ++++----
 fs/f2fs/f2fs.h       | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 1a5fbecd9356..30e68de82f73 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -325,16 +325,16 @@ int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
 void f2fs_ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index,
 							unsigned int ra_blocks)
 {
-	struct page *page;
+	struct folio *folio;
 	bool readahead = false;
 
 	if (ra_blocks == RECOVERY_MIN_RA_BLOCKS)
 		return;
 
-	page = find_get_page(META_MAPPING(sbi), index);
-	if (!page || !PageUptodate(page))
+	folio = filemap_get_folio(META_MAPPING(sbi), index);
+	if (IS_ERR(folio) || !folio_test_uptodate(folio))
 		readahead = true;
-	f2fs_put_page(page, 0);
+	f2fs_folio_put(folio, 0);
 
 	if (readahead)
 		f2fs_ra_meta_pages(sbi, index, ra_blocks, META_POR, true);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 3d2be01f9363..f05185ed1c75 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2871,7 +2871,7 @@ static inline struct page *f2fs_pagecache_get_page(
 
 static inline void f2fs_folio_put(struct folio *folio, bool unlock)
 {
-	if (!folio)
+	if (IS_ERR_OR_NULL(folio))
 		return;
 
 	if (unlock) {
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 020/153] f2fs: Use a folio in write_orphan_inodes()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (18 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 019/153] f2fs: Use a folio in f2fs_ra_meta_pages_cond() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 021/153] f2fs: Use a folio in get_next_nat_page() Matthew Wilcox (Oracle)
                   ` (134 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Call f2fs_grab_meta_folio() instead of f2fs_grab_meta_page().
Removes four hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 30e68de82f73..0b3dfe7397d0 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -784,7 +784,7 @@ static void write_orphan_inodes(struct f2fs_sb_info *sbi, block_t start_blk)
 	unsigned int nentries = 0;
 	unsigned short index = 1;
 	unsigned short orphan_blocks;
-	struct page *page = NULL;
+	struct folio *folio = NULL;
 	struct ino_entry *orphan = NULL;
 	struct inode_management *im = &sbi->im[ORPHAN_INO];
 
@@ -799,10 +799,9 @@ static void write_orphan_inodes(struct f2fs_sb_info *sbi, block_t start_blk)
 
 	/* loop for each orphan inode entry and write them in journal block */
 	list_for_each_entry(orphan, head, list) {
-		if (!page) {
-			page = f2fs_grab_meta_page(sbi, start_blk++);
-			orphan_blk =
-				(struct f2fs_orphan_block *)page_address(page);
+		if (!folio) {
+			folio = f2fs_grab_meta_folio(sbi, start_blk++);
+			orphan_blk = folio_address(folio);
 			memset(orphan_blk, 0, sizeof(*orphan_blk));
 		}
 
@@ -817,20 +816,20 @@ static void write_orphan_inodes(struct f2fs_sb_info *sbi, block_t start_blk)
 			orphan_blk->blk_addr = cpu_to_le16(index);
 			orphan_blk->blk_count = cpu_to_le16(orphan_blocks);
 			orphan_blk->entry_count = cpu_to_le32(nentries);
-			set_page_dirty(page);
-			f2fs_put_page(page, 1);
+			folio_mark_dirty(folio);
+			f2fs_folio_put(folio, true);
 			index++;
 			nentries = 0;
-			page = NULL;
+			folio = NULL;
 		}
 	}
 
-	if (page) {
+	if (folio) {
 		orphan_blk->blk_addr = cpu_to_le16(index);
 		orphan_blk->blk_count = cpu_to_le16(orphan_blocks);
 		orphan_blk->entry_count = cpu_to_le32(nentries);
-		set_page_dirty(page);
-		f2fs_put_page(page, 1);
+		folio_mark_dirty(folio);
+		f2fs_folio_put(folio, true);
 	}
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 021/153] f2fs: Use a folio in get_next_nat_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (19 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 020/153] f2fs: Use a folio in write_orphan_inodes() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 022/153] f2fs: Convert get_next_sit_page() to get_next_sit_folio() Matthew Wilcox (Oracle)
                   ` (133 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Call f2fs_grab_meta_folio() instead of f2fs_grab_meta_page().
Saves a hidden call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 0b2e24ad620d..7c42dd5cd68b 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -138,7 +138,7 @@ static struct page *get_current_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
 static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
 {
 	struct page *src_page;
-	struct page *dst_page;
+	struct folio *dst_folio;
 	pgoff_t dst_off;
 	void *src_addr;
 	void *dst_addr;
@@ -150,18 +150,18 @@ static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
 	src_page = get_current_nat_page(sbi, nid);
 	if (IS_ERR(src_page))
 		return src_page;
-	dst_page = f2fs_grab_meta_page(sbi, dst_off);
+	dst_folio = f2fs_grab_meta_folio(sbi, dst_off);
 	f2fs_bug_on(sbi, PageDirty(src_page));
 
 	src_addr = page_address(src_page);
-	dst_addr = page_address(dst_page);
+	dst_addr = folio_address(dst_folio);
 	memcpy(dst_addr, src_addr, PAGE_SIZE);
-	set_page_dirty(dst_page);
+	folio_mark_dirty(dst_folio);
 	f2fs_put_page(src_page, 1);
 
 	set_to_next_nat(nm_i, nid);
 
-	return dst_page;
+	return &dst_folio->page;
 }
 
 static struct nat_entry *__alloc_nat_entry(struct f2fs_sb_info *sbi,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 022/153] f2fs: Convert get_next_sit_page() to get_next_sit_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (20 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 021/153] f2fs: Use a folio in get_next_nat_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 023/153] f2fs: Use a folio in f2fs_update_meta_page() Matthew Wilcox (Oracle)
                   ` (132 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Grab a folio instead of a page.  Also convert seg_info_to_sit_page() to
seg_info_to_sit_folio() and use a folio in f2fs_flush_sit_entries().
Saves a couple of calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/segment.c | 20 ++++++++++----------
 fs/f2fs/segment.h |  6 +++---
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 8476419db9e4..272490a50a04 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -4497,23 +4497,23 @@ static struct page *get_current_sit_page(struct f2fs_sb_info *sbi,
 	return f2fs_get_meta_page(sbi, current_sit_addr(sbi, segno));
 }
 
-static struct page *get_next_sit_page(struct f2fs_sb_info *sbi,
+static struct folio *get_next_sit_folio(struct f2fs_sb_info *sbi,
 					unsigned int start)
 {
 	struct sit_info *sit_i = SIT_I(sbi);
-	struct page *page;
+	struct folio *folio;
 	pgoff_t src_off, dst_off;
 
 	src_off = current_sit_addr(sbi, start);
 	dst_off = next_sit_addr(sbi, src_off);
 
-	page = f2fs_grab_meta_page(sbi, dst_off);
-	seg_info_to_sit_page(sbi, page, start);
+	folio = f2fs_grab_meta_folio(sbi, dst_off);
+	seg_info_to_sit_folio(sbi, folio, start);
 
-	set_page_dirty(page);
+	folio_mark_dirty(folio);
 	set_to_next_sit(sit_i, start);
 
-	return page;
+	return folio;
 }
 
 static struct sit_entry_set *grab_sit_entry_set(void)
@@ -4643,7 +4643,7 @@ void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 	 * #2, flush sit entries to sit page.
 	 */
 	list_for_each_entry_safe(ses, tmp, head, set_list) {
-		struct page *page = NULL;
+		struct folio *folio = NULL;
 		struct f2fs_sit_block *raw_sit = NULL;
 		unsigned int start_segno = ses->start_segno;
 		unsigned int end = min(start_segno + SIT_ENTRY_PER_BLOCK,
@@ -4657,8 +4657,8 @@ void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 		if (to_journal) {
 			down_write(&curseg->journal_rwsem);
 		} else {
-			page = get_next_sit_page(sbi, start_segno);
-			raw_sit = page_address(page);
+			folio = get_next_sit_folio(sbi, start_segno);
+			raw_sit = folio_address(folio);
 		}
 
 		/* flush dirty sit entries in region of current sit set */
@@ -4704,7 +4704,7 @@ void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 		if (to_journal)
 			up_write(&curseg->journal_rwsem);
 		else
-			f2fs_put_page(page, 1);
+			f2fs_folio_put(folio, true);
 
 		f2fs_bug_on(sbi, ses->entry_cnt);
 		release_sit_entry_set(ses);
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index 0465dc00b349..913f002668b4 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -385,8 +385,8 @@ static inline void __seg_info_to_raw_sit(struct seg_entry *se,
 	rs->mtime = cpu_to_le64(se->mtime);
 }
 
-static inline void seg_info_to_sit_page(struct f2fs_sb_info *sbi,
-				struct page *page, unsigned int start)
+static inline void seg_info_to_sit_folio(struct f2fs_sb_info *sbi,
+				struct folio *folio, unsigned int start)
 {
 	struct f2fs_sit_block *raw_sit;
 	struct seg_entry *se;
@@ -395,7 +395,7 @@ static inline void seg_info_to_sit_page(struct f2fs_sb_info *sbi,
 					(unsigned long)MAIN_SEGS(sbi));
 	int i;
 
-	raw_sit = (struct f2fs_sit_block *)page_address(page);
+	raw_sit = folio_address(folio);
 	memset(raw_sit, 0, PAGE_SIZE);
 	for (i = 0; i < end - start; i++) {
 		rs = &raw_sit->entries[i];
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 023/153] f2fs: Use a folio in f2fs_update_meta_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (21 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 022/153] f2fs: Convert get_next_sit_page() to get_next_sit_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 024/153] f2fs: Use a folio in write_current_sum_page() Matthew Wilcox (Oracle)
                   ` (131 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Grab a folio instead of a page.  Saves two hidden calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/segment.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 272490a50a04..41b9a69c995c 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -2687,11 +2687,11 @@ struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno)
 void f2fs_update_meta_page(struct f2fs_sb_info *sbi,
 					void *src, block_t blk_addr)
 {
-	struct page *page = f2fs_grab_meta_page(sbi, blk_addr);
+	struct folio *folio = f2fs_grab_meta_folio(sbi, blk_addr);
 
-	memcpy(page_address(page), src, PAGE_SIZE);
-	set_page_dirty(page);
-	f2fs_put_page(page, 1);
+	memcpy(folio_address(folio), src, PAGE_SIZE);
+	folio_mark_dirty(folio);
+	f2fs_folio_put(folio, true);
 }
 
 static void write_sum_page(struct f2fs_sb_info *sbi,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 024/153] f2fs: Use a folio in write_current_sum_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (22 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 023/153] f2fs: Use a folio in f2fs_update_meta_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 025/153] f2fs: Use a folio in write_compacted_summaries() Matthew Wilcox (Oracle)
                   ` (130 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Grab a folio instead of a page.  Saves two hidden calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/segment.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 41b9a69c995c..3e6acb9ab610 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -2704,11 +2704,11 @@ static void write_current_sum_page(struct f2fs_sb_info *sbi,
 						int type, block_t blk_addr)
 {
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
-	struct page *page = f2fs_grab_meta_page(sbi, blk_addr);
+	struct folio *folio = f2fs_grab_meta_folio(sbi, blk_addr);
 	struct f2fs_summary_block *src = curseg->sum_blk;
 	struct f2fs_summary_block *dst;
 
-	dst = (struct f2fs_summary_block *)page_address(page);
+	dst = folio_address(folio);
 	memset(dst, 0, PAGE_SIZE);
 
 	mutex_lock(&curseg->curseg_mutex);
@@ -2722,8 +2722,8 @@ static void write_current_sum_page(struct f2fs_sb_info *sbi,
 
 	mutex_unlock(&curseg->curseg_mutex);
 
-	set_page_dirty(page);
-	f2fs_put_page(page, 1);
+	folio_mark_dirty(folio);
+	f2fs_folio_put(folio, true);
 }
 
 static int is_next_segment_free(struct f2fs_sb_info *sbi,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 025/153] f2fs: Use a folio in write_compacted_summaries()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (23 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 024/153] f2fs: Use a folio in write_current_sum_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 026/153] f2fs: Remove f2fs_grab_meta_page() Matthew Wilcox (Oracle)
                   ` (129 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Grab a folio instead of a page.  Saves four hidden calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/segment.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 3e6acb9ab610..baf24d29ed44 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -4392,15 +4392,15 @@ static int restore_curseg_summaries(struct f2fs_sb_info *sbi)
 
 static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr)
 {
-	struct page *page;
+	struct folio *folio;
 	unsigned char *kaddr;
 	struct f2fs_summary *summary;
 	struct curseg_info *seg_i;
 	int written_size = 0;
 	int i, j;
 
-	page = f2fs_grab_meta_page(sbi, blkaddr++);
-	kaddr = (unsigned char *)page_address(page);
+	folio = f2fs_grab_meta_folio(sbi, blkaddr++);
+	kaddr = folio_address(folio);
 	memset(kaddr, 0, PAGE_SIZE);
 
 	/* Step 1: write nat cache */
@@ -4417,9 +4417,9 @@ static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr)
 	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
 		seg_i = CURSEG_I(sbi, i);
 		for (j = 0; j < f2fs_curseg_valid_blocks(sbi, i); j++) {
-			if (!page) {
-				page = f2fs_grab_meta_page(sbi, blkaddr++);
-				kaddr = (unsigned char *)page_address(page);
+			if (!folio) {
+				folio = f2fs_grab_meta_folio(sbi, blkaddr++);
+				kaddr = folio_address(folio);
 				memset(kaddr, 0, PAGE_SIZE);
 				written_size = 0;
 			}
@@ -4431,14 +4431,14 @@ static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr)
 							SUM_FOOTER_SIZE)
 				continue;
 
-			set_page_dirty(page);
-			f2fs_put_page(page, 1);
-			page = NULL;
+			folio_mark_dirty(folio);
+			f2fs_folio_put(folio, true);
+			folio = NULL;
 		}
 	}
-	if (page) {
-		set_page_dirty(page);
-		f2fs_put_page(page, 1);
+	if (folio) {
+		folio_mark_dirty(folio);
+		f2fs_folio_put(folio, true);
 	}
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 026/153] f2fs: Remove f2fs_grab_meta_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (24 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 025/153] f2fs: Use a folio in write_compacted_summaries() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 027/153] f2fs: Add f2fs_get_meta_folio() Matthew Wilcox (Oracle)
                   ` (128 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have now been converted to f2fs_grab_meta_folio() so
we can remove this wrapper.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index f05185ed1c75..0f2d7a6d6991 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3922,12 +3922,6 @@ int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi);
 void f2fs_stop_ckpt_thread(struct f2fs_sb_info *sbi);
 void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
 
-static inline
-struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
-{
-	return &f2fs_grab_meta_folio(sbi, index)->page;
-}
-
 /*
  * data.c
  */
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 027/153] f2fs: Add f2fs_get_meta_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (25 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 026/153] f2fs: Remove f2fs_grab_meta_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 028/153] f2fs: Use a folio in build_sit_entries() Matthew Wilcox (Oracle)
                   ` (127 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert f2fs_get_meta_page() to f2fs_get_meta_folio() and add
f2fs_get_meta_page() as a wrapper.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 4 ++--
 fs/f2fs/f2fs.h       | 8 +++++++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 0b3dfe7397d0..50fc1bbb8685 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -107,9 +107,9 @@ static struct folio *__get_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index,
 	return folio;
 }
 
-struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
+struct folio *f2fs_get_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index)
 {
-	return &__get_meta_folio(sbi, index, true)->page;
+	return __get_meta_folio(sbi, index, true);
 }
 
 struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index)
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 0f2d7a6d6991..1f8a7338dc76 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3880,7 +3880,7 @@ void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
 							unsigned char reason);
 void f2fs_flush_ckpt_thread(struct f2fs_sb_info *sbi);
 struct folio *f2fs_grab_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index);
-struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
+struct folio *f2fs_get_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index);
 struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index);
 struct folio *f2fs_get_tmp_folio(struct f2fs_sb_info *sbi, pgoff_t index);
 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
@@ -3922,6 +3922,12 @@ int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi);
 void f2fs_stop_ckpt_thread(struct f2fs_sb_info *sbi);
 void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
 
+static inline
+struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
+{
+	return &f2fs_get_meta_folio(sbi, index)->page;
+}
+
 /*
  * data.c
  */
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 028/153] f2fs: Use a folio in build_sit_entries()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (26 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 027/153] f2fs: Add f2fs_get_meta_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 029/153] f2fs: Use a folio in f2fs_recover_orphan_inodes() Matthew Wilcox (Oracle)
                   ` (126 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert get_current_sit_page() to get_current_sit_folio() and then
use the folio in build_sit_entries().  Saves a hidden call to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/segment.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index baf24d29ed44..aa0f2f243dba 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -4491,10 +4491,10 @@ int f2fs_lookup_journal_in_cursum(struct f2fs_journal *journal, int type,
 	return -1;
 }
 
-static struct page *get_current_sit_page(struct f2fs_sb_info *sbi,
+static struct folio *get_current_sit_folio(struct f2fs_sb_info *sbi,
 					unsigned int segno)
 {
-	return f2fs_get_meta_page(sbi, current_sit_addr(sbi, segno));
+	return f2fs_get_meta_folio(sbi, current_sit_addr(sbi, segno));
 }
 
 static struct folio *get_next_sit_folio(struct f2fs_sb_info *sbi,
@@ -4916,15 +4916,15 @@ static int build_sit_entries(struct f2fs_sb_info *sbi)
 
 		for (; start < end && start < MAIN_SEGS(sbi); start++) {
 			struct f2fs_sit_block *sit_blk;
-			struct page *page;
+			struct folio *folio;
 
 			se = &sit_i->sentries[start];
-			page = get_current_sit_page(sbi, start);
-			if (IS_ERR(page))
-				return PTR_ERR(page);
-			sit_blk = (struct f2fs_sit_block *)page_address(page);
+			folio = get_current_sit_folio(sbi, start);
+			if (IS_ERR(folio))
+				return PTR_ERR(folio);
+			sit_blk = folio_address(folio);
 			sit = sit_blk->entries[SIT_ENTRY_OFFSET(sit_i, start)];
-			f2fs_put_page(page, 1);
+			f2fs_folio_put(folio, true);
 
 			err = check_block_count(sbi, start, &sit);
 			if (err)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 029/153] f2fs: Use a folio in f2fs_recover_orphan_inodes()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (27 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 028/153] f2fs: Use a folio in build_sit_entries() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 030/153] f2fs: Use a folio in validate_checkpoint() Matthew Wilcox (Oracle)
                   ` (125 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page and use it throughout.  Saves two
hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 50fc1bbb8685..10fdbf48a6bc 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -748,26 +748,26 @@ int f2fs_recover_orphan_inodes(struct f2fs_sb_info *sbi)
 	f2fs_ra_meta_pages(sbi, start_blk, orphan_blocks, META_CP, true);
 
 	for (i = 0; i < orphan_blocks; i++) {
-		struct page *page;
+		struct folio *folio;
 		struct f2fs_orphan_block *orphan_blk;
 
-		page = f2fs_get_meta_page(sbi, start_blk + i);
-		if (IS_ERR(page)) {
-			err = PTR_ERR(page);
+		folio = f2fs_get_meta_folio(sbi, start_blk + i);
+		if (IS_ERR(folio)) {
+			err = PTR_ERR(folio);
 			goto out;
 		}
 
-		orphan_blk = (struct f2fs_orphan_block *)page_address(page);
+		orphan_blk = folio_address(folio);
 		for (j = 0; j < le32_to_cpu(orphan_blk->entry_count); j++) {
 			nid_t ino = le32_to_cpu(orphan_blk->ino[j]);
 
 			err = recover_orphan_inode(sbi, ino);
 			if (err) {
-				f2fs_put_page(page, 1);
+				f2fs_folio_put(folio, true);
 				goto out;
 			}
 		}
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 	}
 	/* clear Orphan Flag */
 	clear_ckpt_flags(sbi, CP_ORPHAN_PRESENT_FLAG);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 030/153] f2fs: Use a folio in validate_checkpoint()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (28 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 029/153] f2fs: Use a folio in f2fs_recover_orphan_inodes() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 031/153] f2fs: Use a folio in f2fs_get_valid_checkpoint() Matthew Wilcox (Oracle)
                   ` (124 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert get_checkpoint_version() to take a folio and use it throughout
validate_checkpoint().  Saves five hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 10fdbf48a6bc..8ae015b304db 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -849,29 +849,29 @@ static __u32 f2fs_checkpoint_chksum(struct f2fs_sb_info *sbi,
 }
 
 static int get_checkpoint_version(struct f2fs_sb_info *sbi, block_t cp_addr,
-		struct f2fs_checkpoint **cp_block, struct page **cp_page,
+		struct f2fs_checkpoint **cp_block, struct folio **cp_folio,
 		unsigned long long *version)
 {
 	size_t crc_offset = 0;
 	__u32 crc;
 
-	*cp_page = f2fs_get_meta_page(sbi, cp_addr);
-	if (IS_ERR(*cp_page))
-		return PTR_ERR(*cp_page);
+	*cp_folio = f2fs_get_meta_folio(sbi, cp_addr);
+	if (IS_ERR(*cp_folio))
+		return PTR_ERR(*cp_folio);
 
-	*cp_block = (struct f2fs_checkpoint *)page_address(*cp_page);
+	*cp_block = folio_address(*cp_folio);
 
 	crc_offset = le32_to_cpu((*cp_block)->checksum_offset);
 	if (crc_offset < CP_MIN_CHKSUM_OFFSET ||
 			crc_offset > CP_CHKSUM_OFFSET) {
-		f2fs_put_page(*cp_page, 1);
+		f2fs_folio_put(*cp_folio, true);
 		f2fs_warn(sbi, "invalid crc_offset: %zu", crc_offset);
 		return -EINVAL;
 	}
 
 	crc = f2fs_checkpoint_chksum(sbi, *cp_block);
 	if (crc != cur_cp_crc(*cp_block)) {
-		f2fs_put_page(*cp_page, 1);
+		f2fs_folio_put(*cp_folio, true);
 		f2fs_warn(sbi, "invalid crc value");
 		return -EINVAL;
 	}
@@ -883,14 +883,14 @@ static int get_checkpoint_version(struct f2fs_sb_info *sbi, block_t cp_addr,
 static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
 				block_t cp_addr, unsigned long long *version)
 {
-	struct page *cp_page_1 = NULL, *cp_page_2 = NULL;
+	struct folio *cp_folio_1 = NULL, *cp_folio_2 = NULL;
 	struct f2fs_checkpoint *cp_block = NULL;
 	unsigned long long cur_version = 0, pre_version = 0;
 	unsigned int cp_blocks;
 	int err;
 
 	err = get_checkpoint_version(sbi, cp_addr, &cp_block,
-					&cp_page_1, version);
+					&cp_folio_1, version);
 	if (err)
 		return NULL;
 
@@ -905,19 +905,19 @@ static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
 
 	cp_addr += cp_blocks - 1;
 	err = get_checkpoint_version(sbi, cp_addr, &cp_block,
-					&cp_page_2, version);
+					&cp_folio_2, version);
 	if (err)
 		goto invalid_cp;
 	cur_version = *version;
 
 	if (cur_version == pre_version) {
 		*version = cur_version;
-		f2fs_put_page(cp_page_2, 1);
-		return cp_page_1;
+		f2fs_folio_put(cp_folio_2, true);
+		return &cp_folio_1->page;
 	}
-	f2fs_put_page(cp_page_2, 1);
+	f2fs_folio_put(cp_folio_2, true);
 invalid_cp:
-	f2fs_put_page(cp_page_1, 1);
+	f2fs_folio_put(cp_folio_1, true);
 	return NULL;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 031/153] f2fs: Use a folio in f2fs_get_valid_checkpoint()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (29 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 030/153] f2fs: Use a folio in validate_checkpoint() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-04-27 11:26   ` Chao Yu via Linux-f2fs-devel
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 032/153] f2fs: Use a folio in f2fs_get_node_info() Matthew Wilcox (Oracle)
                   ` (123 subsequent siblings)
  154 siblings, 1 reply; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert validate_checkpoint() to return a folio and use it throughout
f2fs_get_valid_checkpoint().  Saves five hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c | 38 +++++++++++++++++++-------------------
 1 file changed, 19 insertions(+), 19 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 8ae015b304db..c34add47ea8d 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -880,7 +880,7 @@ static int get_checkpoint_version(struct f2fs_sb_info *sbi, block_t cp_addr,
 	return 0;
 }
 
-static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
+static struct folio *validate_checkpoint(struct f2fs_sb_info *sbi,
 				block_t cp_addr, unsigned long long *version)
 {
 	struct folio *cp_folio_1 = NULL, *cp_folio_2 = NULL;
@@ -913,7 +913,7 @@ static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
 	if (cur_version == pre_version) {
 		*version = cur_version;
 		f2fs_folio_put(cp_folio_2, true);
-		return &cp_folio_1->page;
+		return cp_folio_1;
 	}
 	f2fs_folio_put(cp_folio_2, true);
 invalid_cp:
@@ -925,7 +925,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
 {
 	struct f2fs_checkpoint *cp_block;
 	struct f2fs_super_block *fsb = sbi->raw_super;
-	struct page *cp1, *cp2, *cur_page;
+	struct folio *cp1, *cp2, *cur_folio;
 	unsigned long blk_size = sbi->blocksize;
 	unsigned long long cp1_version = 0, cp2_version = 0;
 	unsigned long long cp_start_blk_no;
@@ -952,22 +952,22 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
 
 	if (cp1 && cp2) {
 		if (ver_after(cp2_version, cp1_version))
-			cur_page = cp2;
+			cur_folio = cp2;
 		else
-			cur_page = cp1;
+			cur_folio = cp1;
 	} else if (cp1) {
-		cur_page = cp1;
+		cur_folio = cp1;
 	} else if (cp2) {
-		cur_page = cp2;
+		cur_folio = cp2;
 	} else {
 		err = -EFSCORRUPTED;
 		goto fail_no_cp;
 	}
 
-	cp_block = (struct f2fs_checkpoint *)page_address(cur_page);
+	cp_block = folio_address(cur_folio);
 	memcpy(sbi->ckpt, cp_block, blk_size);
 
-	if (cur_page == cp1)
+	if (cur_folio == cp1)
 		sbi->cur_cp_pack = 1;
 	else
 		sbi->cur_cp_pack = 2;
@@ -982,30 +982,30 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
 		goto done;
 
 	cp_blk_no = le32_to_cpu(fsb->cp_blkaddr);
-	if (cur_page == cp2)
+	if (cur_folio == cp2)
 		cp_blk_no += BIT(le32_to_cpu(fsb->log_blocks_per_seg));
 
 	for (i = 1; i < cp_blks; i++) {
 		void *sit_bitmap_ptr;
 		unsigned char *ckpt = (unsigned char *)sbi->ckpt;
 
-		cur_page = f2fs_get_meta_page(sbi, cp_blk_no + i);
-		if (IS_ERR(cur_page)) {
-			err = PTR_ERR(cur_page);
+		cur_folio = f2fs_get_meta_folio(sbi, cp_blk_no + i);
+		if (IS_ERR(cur_folio)) {
+			err = PTR_ERR(cur_folio);
 			goto free_fail_no_cp;
 		}
-		sit_bitmap_ptr = page_address(cur_page);
+		sit_bitmap_ptr = folio_address(cur_folio);
 		memcpy(ckpt + i * blk_size, sit_bitmap_ptr, blk_size);
-		f2fs_put_page(cur_page, 1);
+		f2fs_folio_put(cur_folio, 1);
 	}
 done:
-	f2fs_put_page(cp1, 1);
-	f2fs_put_page(cp2, 1);
+	f2fs_folio_put(cp1, 1);
+	f2fs_folio_put(cp2, 1);
 	return 0;
 
 free_fail_no_cp:
-	f2fs_put_page(cp1, 1);
-	f2fs_put_page(cp2, 1);
+	f2fs_folio_put(cp1, 1);
+	f2fs_folio_put(cp2, 1);
 fail_no_cp:
 	kvfree(sbi->ckpt);
 	return err;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 032/153] f2fs: Use a folio in f2fs_get_node_info()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (30 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 031/153] f2fs: Use a folio in f2fs_get_valid_checkpoint() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 033/153] f2fs: Use a folio in __get_nat_bitmaps() Matthew Wilcox (Oracle)
                   ` (122 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page.  Saves a hidden call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 7c42dd5cd68b..7e32763cc51e 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -551,7 +551,7 @@ int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
 	struct f2fs_journal *journal = curseg->journal;
 	nid_t start_nid = START_NID(nid);
 	struct f2fs_nat_block *nat_blk;
-	struct page *page = NULL;
+	struct folio *folio = NULL;
 	struct f2fs_nat_entry ne;
 	struct nat_entry *e;
 	pgoff_t index;
@@ -601,14 +601,14 @@ int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
 	index = current_nat_addr(sbi, nid);
 	f2fs_up_read(&nm_i->nat_tree_lock);
 
-	page = f2fs_get_meta_page(sbi, index);
-	if (IS_ERR(page))
-		return PTR_ERR(page);
+	folio = f2fs_get_meta_folio(sbi, index);
+	if (IS_ERR(folio))
+		return PTR_ERR(folio);
 
-	nat_blk = (struct f2fs_nat_block *)page_address(page);
+	nat_blk = folio_address(folio);
 	ne = nat_blk->entries[nid - start_nid];
 	node_info_from_raw_nat(ni, &ne);
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 cache:
 	blkaddr = le32_to_cpu(ne.block_addr);
 	if (__is_valid_data_blkaddr(blkaddr) &&
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 033/153] f2fs: Use a folio in __get_nat_bitmaps()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (31 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 032/153] f2fs: Use a folio in f2fs_get_node_info() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 034/153] f2fs: Use a folio in read_compacted_summaries() Matthew Wilcox (Oracle)
                   ` (121 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page.  Saves a hidden call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 7e32763cc51e..e1fa3babb50f 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -3175,15 +3175,15 @@ static int __get_nat_bitmaps(struct f2fs_sb_info *sbi)
 	nat_bits_addr = __start_cp_addr(sbi) + BLKS_PER_SEG(sbi) -
 						nm_i->nat_bits_blocks;
 	for (i = 0; i < nm_i->nat_bits_blocks; i++) {
-		struct page *page;
+		struct folio *folio;
 
-		page = f2fs_get_meta_page(sbi, nat_bits_addr++);
-		if (IS_ERR(page))
-			return PTR_ERR(page);
+		folio = f2fs_get_meta_folio(sbi, nat_bits_addr++);
+		if (IS_ERR(folio))
+			return PTR_ERR(folio);
 
 		memcpy(nm_i->nat_bits + F2FS_BLK_TO_BYTES(i),
-					page_address(page), F2FS_BLKSIZE);
-		f2fs_put_page(page, 1);
+					folio_address(folio), F2FS_BLKSIZE);
+		f2fs_folio_put(folio, true);
 	}
 
 	cp_ver |= (cur_cp_crc(ckpt) << 32);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 034/153] f2fs: Use a folio in read_compacted_summaries()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (32 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 033/153] f2fs: Use a folio in __get_nat_bitmaps() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 035/153] f2fs: Use a folio in read_normal_summaries() Matthew Wilcox (Oracle)
                   ` (120 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page.  Saves two hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/segment.c | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index aa0f2f243dba..61888496eaa9 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -4213,16 +4213,16 @@ static int read_compacted_summaries(struct f2fs_sb_info *sbi)
 	struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
 	struct curseg_info *seg_i;
 	unsigned char *kaddr;
-	struct page *page;
+	struct folio *folio;
 	block_t start;
 	int i, j, offset;
 
 	start = start_sum_block(sbi);
 
-	page = f2fs_get_meta_page(sbi, start++);
-	if (IS_ERR(page))
-		return PTR_ERR(page);
-	kaddr = (unsigned char *)page_address(page);
+	folio = f2fs_get_meta_folio(sbi, start++);
+	if (IS_ERR(folio))
+		return PTR_ERR(folio);
+	kaddr = folio_address(folio);
 
 	/* Step 1: restore nat cache */
 	seg_i = CURSEG_I(sbi, CURSEG_HOT_DATA);
@@ -4259,17 +4259,16 @@ static int read_compacted_summaries(struct f2fs_sb_info *sbi)
 						SUM_FOOTER_SIZE)
 				continue;
 
-			f2fs_put_page(page, 1);
-			page = NULL;
+			f2fs_folio_put(folio, true);
 
-			page = f2fs_get_meta_page(sbi, start++);
-			if (IS_ERR(page))
-				return PTR_ERR(page);
-			kaddr = (unsigned char *)page_address(page);
+			folio = f2fs_get_meta_folio(sbi, start++);
+			if (IS_ERR(folio))
+				return PTR_ERR(folio);
+			kaddr = folio_address(folio);
 			offset = 0;
 		}
 	}
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 	return 0;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 035/153] f2fs: Use a folio in read_normal_summaries()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (33 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 034/153] f2fs: Use a folio in read_compacted_summaries() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 036/153] f2fs: Remove f2fs_get_meta_page() Matthew Wilcox (Oracle)
                   ` (119 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page.  Saves a hidden call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/segment.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 61888496eaa9..66d5dc15b281 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -4277,7 +4277,7 @@ static int read_normal_summaries(struct f2fs_sb_info *sbi, int type)
 	struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
 	struct f2fs_summary_block *sum;
 	struct curseg_info *curseg;
-	struct page *new;
+	struct folio *new;
 	unsigned short blk_off;
 	unsigned int segno = 0;
 	block_t blk_addr = 0;
@@ -4304,10 +4304,10 @@ static int read_normal_summaries(struct f2fs_sb_info *sbi, int type)
 			blk_addr = GET_SUM_BLOCK(sbi, segno);
 	}
 
-	new = f2fs_get_meta_page(sbi, blk_addr);
+	new = f2fs_get_meta_folio(sbi, blk_addr);
 	if (IS_ERR(new))
 		return PTR_ERR(new);
-	sum = (struct f2fs_summary_block *)page_address(new);
+	sum = folio_address(new);
 
 	if (IS_NODESEG(type)) {
 		if (__exist_node_summaries(sbi)) {
@@ -4342,7 +4342,7 @@ static int read_normal_summaries(struct f2fs_sb_info *sbi, int type)
 	curseg->next_blkoff = blk_off;
 	mutex_unlock(&curseg->curseg_mutex);
 out:
-	f2fs_put_page(new, 1);
+	f2fs_folio_put(new, true);
 	return err;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 036/153] f2fs: Remove f2fs_get_meta_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (34 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 035/153] f2fs: Use a folio in read_normal_summaries() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 037/153] f2fs: Convert f2fs_get_meta_page_retry() to f2fs_get_meta_folio_retry() Matthew Wilcox (Oracle)
                   ` (118 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have now been converted to f2fs_get_meta_folio() so
we can remove this wrapper.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 1f8a7338dc76..3c632154bd6e 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3922,12 +3922,6 @@ int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi);
 void f2fs_stop_ckpt_thread(struct f2fs_sb_info *sbi);
 void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
 
-static inline
-struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
-{
-	return &f2fs_get_meta_folio(sbi, index)->page;
-}
-
 /*
  * data.c
  */
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 037/153] f2fs: Convert f2fs_get_meta_page_retry() to f2fs_get_meta_folio_retry()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (35 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 036/153] f2fs: Remove f2fs_get_meta_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 038/153] f2fs: Pass an address to scan_nat_page() Matthew Wilcox (Oracle)
                   ` (117 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Also convert get_current_nat_page() to get_current_nat_folio().
Removes three hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c |  4 ++--
 fs/f2fs/f2fs.h       |  2 +-
 fs/f2fs/node.c       | 28 ++++++++++++++--------------
 fs/f2fs/segment.c    |  2 +-
 4 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index c34add47ea8d..b9f19fb9b983 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -112,7 +112,7 @@ struct folio *f2fs_get_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index)
 	return __get_meta_folio(sbi, index, true);
 }
 
-struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index)
+struct folio *f2fs_get_meta_folio_retry(struct f2fs_sb_info *sbi, pgoff_t index)
 {
 	struct folio *folio;
 	int count = 0;
@@ -125,7 +125,7 @@ struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index)
 			goto retry;
 		f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_META_PAGE);
 	}
-	return &folio->page;
+	return folio;
 }
 
 /* for POR only */
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 3c632154bd6e..55fed88b79e1 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3881,7 +3881,7 @@ void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
 void f2fs_flush_ckpt_thread(struct f2fs_sb_info *sbi);
 struct folio *f2fs_grab_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index);
 struct folio *f2fs_get_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index);
-struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index);
+struct folio *f2fs_get_meta_folio_retry(struct f2fs_sb_info *sbi, pgoff_t index);
 struct folio *f2fs_get_tmp_folio(struct f2fs_sb_info *sbi, pgoff_t index);
 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
 					block_t blkaddr, int type);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index e1fa3babb50f..ffe71868f459 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -130,14 +130,14 @@ static void clear_node_page_dirty(struct page *page)
 	ClearPageUptodate(page);
 }
 
-static struct page *get_current_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
+static struct folio *get_current_nat_folio(struct f2fs_sb_info *sbi, nid_t nid)
 {
-	return f2fs_get_meta_page_retry(sbi, current_nat_addr(sbi, nid));
+	return f2fs_get_meta_folio_retry(sbi, current_nat_addr(sbi, nid));
 }
 
 static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
 {
-	struct page *src_page;
+	struct folio *src_folio;
 	struct folio *dst_folio;
 	pgoff_t dst_off;
 	void *src_addr;
@@ -147,17 +147,17 @@ static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
 	dst_off = next_nat_addr(sbi, current_nat_addr(sbi, nid));
 
 	/* get current nat block page with lock */
-	src_page = get_current_nat_page(sbi, nid);
-	if (IS_ERR(src_page))
-		return src_page;
+	src_folio = get_current_nat_folio(sbi, nid);
+	if (IS_ERR(src_folio))
+		return &src_folio->page;
 	dst_folio = f2fs_grab_meta_folio(sbi, dst_off);
-	f2fs_bug_on(sbi, PageDirty(src_page));
+	f2fs_bug_on(sbi, folio_test_dirty(src_folio));
 
-	src_addr = page_address(src_page);
+	src_addr = folio_address(src_folio);
 	dst_addr = folio_address(dst_folio);
 	memcpy(dst_addr, src_addr, PAGE_SIZE);
 	folio_mark_dirty(dst_folio);
-	f2fs_put_page(src_page, 1);
+	f2fs_folio_put(src_folio, true);
 
 	set_to_next_nat(nm_i, nid);
 
@@ -2546,13 +2546,13 @@ static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi,
 	while (1) {
 		if (!test_bit_le(NAT_BLOCK_OFFSET(nid),
 						nm_i->nat_block_bitmap)) {
-			struct page *page = get_current_nat_page(sbi, nid);
+			struct folio *folio = get_current_nat_folio(sbi, nid);
 
-			if (IS_ERR(page)) {
-				ret = PTR_ERR(page);
+			if (IS_ERR(folio)) {
+				ret = PTR_ERR(folio);
 			} else {
-				ret = scan_nat_page(sbi, page, nid);
-				f2fs_put_page(page, 1);
+				ret = scan_nat_page(sbi, &folio->page, nid);
+				f2fs_folio_put(folio, true);
 			}
 
 			if (ret) {
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 66d5dc15b281..2f88f9294ba9 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -2681,7 +2681,7 @@ struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno)
 {
 	if (unlikely(f2fs_cp_error(sbi)))
 		return ERR_PTR(-EIO);
-	return f2fs_get_meta_page_retry(sbi, GET_SUM_BLOCK(sbi, segno));
+	return &f2fs_get_meta_folio_retry(sbi, GET_SUM_BLOCK(sbi, segno))->page;
 }
 
 void f2fs_update_meta_page(struct f2fs_sb_info *sbi,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 038/153] f2fs: Pass an address to scan_nat_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (36 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 037/153] f2fs: Convert f2fs_get_meta_page_retry() to f2fs_get_meta_folio_retry() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 039/153] f2fs: Add f2fs_get_sum_folio() Matthew Wilcox (Oracle)
                   ` (116 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a conversion from folio to page by passing in the address of the
first byte rather than the struct page containing it.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index ffe71868f459..34dc61a131bf 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2423,10 +2423,9 @@ static void remove_free_nid(struct f2fs_sb_info *sbi, nid_t nid)
 }
 
 static int scan_nat_page(struct f2fs_sb_info *sbi,
-			struct page *nat_page, nid_t start_nid)
+			struct f2fs_nat_block *nat_blk, nid_t start_nid)
 {
 	struct f2fs_nm_info *nm_i = NM_I(sbi);
-	struct f2fs_nat_block *nat_blk = page_address(nat_page);
 	block_t blk_addr;
 	unsigned int nat_ofs = NAT_BLOCK_OFFSET(start_nid);
 	int i;
@@ -2551,7 +2550,8 @@ static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi,
 			if (IS_ERR(folio)) {
 				ret = PTR_ERR(folio);
 			} else {
-				ret = scan_nat_page(sbi, &folio->page, nid);
+				ret = scan_nat_page(sbi, folio_address(folio),
+						nid);
 				f2fs_folio_put(folio, true);
 			}
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 039/153] f2fs: Add f2fs_get_sum_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (37 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 038/153] f2fs: Pass an address to scan_nat_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:10 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 040/153] f2fs: Use folios in do_garbage_collect() Matthew Wilcox (Oracle)
                   ` (115 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:10 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert f2fs_get_sum_page() to f2fs_get_sum_folio() and add a
f2fs_get_sum_page() wrapper.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h    | 8 +++++++-
 fs/f2fs/segment.c | 6 +++---
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 55fed88b79e1..55a161d39e4a 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3807,7 +3807,7 @@ int f2fs_allocate_new_segments(struct f2fs_sb_info *sbi);
 int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
 bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
 					struct cp_control *cpc);
-struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno);
+struct folio *f2fs_get_sum_folio(struct f2fs_sb_info *sbi, unsigned int segno);
 void f2fs_update_meta_page(struct f2fs_sb_info *sbi, void *src,
 					block_t blk_addr);
 void f2fs_do_write_meta_page(struct f2fs_sb_info *sbi, struct folio *folio,
@@ -3863,6 +3863,12 @@ static inline struct inode *fio_inode(struct f2fs_io_info *fio)
 	return page_folio(fio->page)->mapping->host;
 }
 
+static inline
+struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno)
+{
+	return &f2fs_get_sum_folio(sbi, segno)->page;
+}
+
 #define DEF_FRAGMENT_SIZE	4
 #define MIN_FRAGMENT_SIZE	1
 #define MAX_FRAGMENT_SIZE	512
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 2f88f9294ba9..a3d4903cfb0b 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -2675,13 +2675,13 @@ int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra)
 }
 
 /*
- * Caller should put this summary page
+ * Caller should put this summary folio
  */
-struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno)
+struct folio *f2fs_get_sum_folio(struct f2fs_sb_info *sbi, unsigned int segno)
 {
 	if (unlikely(f2fs_cp_error(sbi)))
 		return ERR_PTR(-EIO);
-	return &f2fs_get_meta_folio_retry(sbi, GET_SUM_BLOCK(sbi, segno))->page;
+	return f2fs_get_meta_folio_retry(sbi, GET_SUM_BLOCK(sbi, segno));
 }
 
 void f2fs_update_meta_page(struct f2fs_sb_info *sbi,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 040/153] f2fs: Use folios in do_garbage_collect()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (38 preceding siblings ...)
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 039/153] f2fs: Add f2fs_get_sum_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 041/153] f2fs: Use a folio in check_index_in_prev_nodes() Matthew Wilcox (Oracle)
                   ` (114 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page and operate on folios throughout.
Remove six calls to compound_head() and use folio_put_refs() to put
both references we hold at the same time, reducing the number of atomic
operations we do.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/gc.c | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index fa51b871290d..1f3c275099e5 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1719,8 +1719,6 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
 				struct gc_inode_list *gc_list, int gc_type,
 				bool force_migrate, bool one_time)
 {
-	struct page *sum_page;
-	struct f2fs_summary_block *sum;
 	struct blk_plug plug;
 	unsigned int segno = start_segno;
 	unsigned int end_segno = start_segno + SEGS_PER_SEC(sbi);
@@ -1770,40 +1768,40 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
 
 	/* reference all summary page */
 	while (segno < end_segno) {
-		sum_page = f2fs_get_sum_page(sbi, segno++);
-		if (IS_ERR(sum_page)) {
-			int err = PTR_ERR(sum_page);
+		struct folio *sum_folio = f2fs_get_sum_folio(sbi, segno++);
+		if (IS_ERR(sum_folio)) {
+			int err = PTR_ERR(sum_folio);
 
 			end_segno = segno - 1;
 			for (segno = start_segno; segno < end_segno; segno++) {
-				sum_page = find_get_page(META_MAPPING(sbi),
+				sum_folio = filemap_get_folio(META_MAPPING(sbi),
 						GET_SUM_BLOCK(sbi, segno));
-				f2fs_put_page(sum_page, 0);
-				f2fs_put_page(sum_page, 0);
+				folio_put_refs(sum_folio, 2);
 			}
 			return err;
 		}
-		unlock_page(sum_page);
+		folio_unlock(sum_folio);
 	}
 
 	blk_start_plug(&plug);
 
 	for (segno = start_segno; segno < end_segno; segno++) {
+		struct f2fs_summary_block *sum;
 
 		/* find segment summary of victim */
-		sum_page = find_get_page(META_MAPPING(sbi),
+		struct folio *sum_folio = filemap_get_folio(META_MAPPING(sbi),
 					GET_SUM_BLOCK(sbi, segno));
-		f2fs_put_page(sum_page, 0);
 
 		if (get_valid_blocks(sbi, segno, false) == 0)
 			goto freed;
 		if (gc_type == BG_GC && __is_large_section(sbi) &&
 				migrated >= sbi->migration_granularity)
 			goto skip;
-		if (!PageUptodate(sum_page) || unlikely(f2fs_cp_error(sbi)))
+		if (!folio_test_uptodate(sum_folio) ||
+		    unlikely(f2fs_cp_error(sbi)))
 			goto skip;
 
-		sum = page_address(sum_page);
+		sum = folio_address(sum_folio);
 		if (type != GET_SUM_TYPE((&sum->footer))) {
 			f2fs_err(sbi, "Inconsistent segment (%u) type [%d, %d] in SSA and SIT",
 				 segno, type, GET_SUM_TYPE((&sum->footer)));
@@ -1841,7 +1839,7 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
 				(segno + 1 < sec_end_segno) ?
 					segno + 1 : NULL_SEGNO;
 skip:
-		f2fs_put_page(sum_page, 0);
+		folio_put_refs(sum_folio, 2);
 	}
 
 	if (submitted)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 041/153] f2fs: Use a folio in check_index_in_prev_nodes()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (39 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 040/153] f2fs: Use folios in do_garbage_collect() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 042/153] f2fs: Use a folio in change_curseg() Matthew Wilcox (Oracle)
                   ` (113 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page and operate on it.  Saves a call to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/recovery.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index a29bd82de93b..4b2c09d63bbf 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -494,7 +494,8 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 	unsigned short blkoff = GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
 	struct f2fs_summary_block *sum_node;
 	struct f2fs_summary sum;
-	struct page *sum_page, *node_page;
+	struct folio *sum_folio;
+	struct page *node_page;
 	struct dnode_of_data tdn = *dn;
 	nid_t ino, nid;
 	struct inode *inode;
@@ -516,12 +517,12 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 		}
 	}
 
-	sum_page = f2fs_get_sum_page(sbi, segno);
-	if (IS_ERR(sum_page))
-		return PTR_ERR(sum_page);
-	sum_node = (struct f2fs_summary_block *)page_address(sum_page);
+	sum_folio = f2fs_get_sum_folio(sbi, segno);
+	if (IS_ERR(sum_folio))
+		return PTR_ERR(sum_folio);
+	sum_node = folio_address(sum_folio);
 	sum = sum_node->entries[blkoff];
-	f2fs_put_page(sum_page, 1);
+	f2fs_folio_put(sum_folio, true);
 got_it:
 	/* Use the locked dnode page and inode */
 	nid = le32_to_cpu(sum.nid);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 042/153] f2fs: Use a folio in change_curseg()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (40 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 041/153] f2fs: Use a folio in check_index_in_prev_nodes() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 043/153] f2fs: Remove f2fs_get_sum_page() Matthew Wilcox (Oracle)
                   ` (112 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio and use it.  Saves a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/segment.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index a3d4903cfb0b..88890755a394 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -2997,7 +2997,7 @@ static int change_curseg(struct f2fs_sb_info *sbi, int type)
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
 	unsigned int new_segno = curseg->next_segno;
 	struct f2fs_summary_block *sum_node;
-	struct page *sum_page;
+	struct folio *sum_folio;
 
 	if (curseg->inited)
 		write_sum_page(sbi, curseg->sum_blk, GET_SUM_BLOCK(sbi, curseg->segno));
@@ -3013,15 +3013,15 @@ static int change_curseg(struct f2fs_sb_info *sbi, int type)
 	curseg->alloc_type = SSR;
 	curseg->next_blkoff = __next_free_blkoff(sbi, curseg->segno, 0);
 
-	sum_page = f2fs_get_sum_page(sbi, new_segno);
-	if (IS_ERR(sum_page)) {
+	sum_folio = f2fs_get_sum_folio(sbi, new_segno);
+	if (IS_ERR(sum_folio)) {
 		/* GC won't be able to use stale summary pages by cp_error */
 		memset(curseg->sum_blk, 0, SUM_ENTRY_SIZE);
-		return PTR_ERR(sum_page);
+		return PTR_ERR(sum_folio);
 	}
-	sum_node = (struct f2fs_summary_block *)page_address(sum_page);
+	sum_node = folio_address(sum_folio);
 	memcpy(curseg->sum_blk, sum_node, SUM_ENTRY_SIZE);
-	f2fs_put_page(sum_page, 1);
+	f2fs_folio_put(sum_folio, true);
 	return 0;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 043/153] f2fs: Remove f2fs_get_sum_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (41 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 042/153] f2fs: Use a folio in change_curseg() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 044/153] f2fs: Use a folio in find_in_level() Matthew Wilcox (Oracle)
                   ` (111 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have now been converted to call f2fs_get_sum_folio()
instead.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 55a161d39e4a..b6ca1e5a721e 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3863,12 +3863,6 @@ static inline struct inode *fio_inode(struct f2fs_io_info *fio)
 	return page_folio(fio->page)->mapping->host;
 }
 
-static inline
-struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno)
-{
-	return &f2fs_get_sum_folio(sbi, segno)->page;
-}
-
 #define DEF_FRAGMENT_SIZE	4
 #define MIN_FRAGMENT_SIZE	1
 #define MAX_FRAGMENT_SIZE	512
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 044/153] f2fs: Use a folio in find_in_level()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (42 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 043/153] f2fs: Remove f2fs_get_sum_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 045/153] f2fs: Use a folio in f2fs_delete_entry() Matthew Wilcox (Oracle)
                   ` (110 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page and use it throughout.  Removes a
call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 5a63ff0df03b..f2dd3c159e28 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -173,7 +173,7 @@ static unsigned long dir_block_index(unsigned int level,
 }
 
 static struct f2fs_dir_entry *find_in_block(struct inode *dir,
-				struct page *dentry_page,
+				struct folio *dentry_folio,
 				const struct f2fs_filename *fname,
 				int *max_slots,
 				bool use_hash)
@@ -181,7 +181,7 @@ static struct f2fs_dir_entry *find_in_block(struct inode *dir,
 	struct f2fs_dentry_block *dentry_blk;
 	struct f2fs_dentry_ptr d;
 
-	dentry_blk = (struct f2fs_dentry_block *)page_address(dentry_page);
+	dentry_blk = folio_address(dentry_folio);
 
 	make_dentry_ptr_block(dir, &d, dentry_blk);
 	return f2fs_find_target_dentry(&d, fname, max_slots, use_hash);
@@ -266,7 +266,6 @@ static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 	int s = GET_DENTRY_SLOTS(fname->disk_name.len);
 	unsigned int nbucket, nblock;
 	unsigned int bidx, end_block, bucket_no;
-	struct page *dentry_page;
 	struct f2fs_dir_entry *de = NULL;
 	pgoff_t next_pgofs;
 	bool room = false;
@@ -284,31 +283,32 @@ static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 
 	while (bidx < end_block) {
 		/* no need to allocate new dentry pages to all the indices */
-		dentry_page = f2fs_find_data_page(dir, bidx, &next_pgofs);
-		if (IS_ERR(dentry_page)) {
-			if (PTR_ERR(dentry_page) == -ENOENT) {
+		struct folio *dentry_folio;
+		dentry_folio = f2fs_find_data_folio(dir, bidx, &next_pgofs);
+		if (IS_ERR(dentry_folio)) {
+			if (PTR_ERR(dentry_folio) == -ENOENT) {
 				room = true;
 				bidx = next_pgofs;
 				continue;
 			} else {
-				*res_page = dentry_page;
+				*res_page = &dentry_folio->page;
 				break;
 			}
 		}
 
-		de = find_in_block(dir, dentry_page, fname, &max_slots, use_hash);
+		de = find_in_block(dir, dentry_folio, fname, &max_slots, use_hash);
 		if (IS_ERR(de)) {
 			*res_page = ERR_CAST(de);
 			de = NULL;
 			break;
 		} else if (de) {
-			*res_page = dentry_page;
+			*res_page = &dentry_folio->page;
 			break;
 		}
 
 		if (max_slots >= s)
 			room = true;
-		f2fs_put_page(dentry_page, 0);
+		f2fs_folio_put(dentry_folio, false);
 
 		bidx++;
 	}
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 045/153] f2fs: Use a folio in f2fs_delete_entry()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (43 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 044/153] f2fs: Use a folio in find_in_level() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 046/153] f2fs: Use a folio in f2fs_readdir() Matthew Wilcox (Oracle)
                   ` (109 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page and operate on it.  Saves a call to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index f2dd3c159e28..a24f04fc9073 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -912,7 +912,6 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
 bool f2fs_empty_dir(struct inode *dir)
 {
 	unsigned long bidx = 0;
-	struct page *dentry_page;
 	unsigned int bit_pos;
 	struct f2fs_dentry_block *dentry_blk;
 	unsigned long nblock = dir_blocks(dir);
@@ -922,10 +921,11 @@ bool f2fs_empty_dir(struct inode *dir)
 
 	while (bidx < nblock) {
 		pgoff_t next_pgofs;
+		struct folio *dentry_folio;
 
-		dentry_page = f2fs_find_data_page(dir, bidx, &next_pgofs);
-		if (IS_ERR(dentry_page)) {
-			if (PTR_ERR(dentry_page) == -ENOENT) {
+		dentry_folio = f2fs_find_data_folio(dir, bidx, &next_pgofs);
+		if (IS_ERR(dentry_folio)) {
+			if (PTR_ERR(dentry_folio) == -ENOENT) {
 				bidx = next_pgofs;
 				continue;
 			} else {
@@ -933,7 +933,7 @@ bool f2fs_empty_dir(struct inode *dir)
 			}
 		}
 
-		dentry_blk = page_address(dentry_page);
+		dentry_blk = folio_address(dentry_folio);
 		if (bidx == 0)
 			bit_pos = 2;
 		else
@@ -942,7 +942,7 @@ bool f2fs_empty_dir(struct inode *dir)
 						NR_DENTRY_IN_BLOCK,
 						bit_pos);
 
-		f2fs_put_page(dentry_page, 0);
+		f2fs_folio_put(dentry_folio, false);
 
 		if (bit_pos < NR_DENTRY_IN_BLOCK)
 			return false;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 046/153] f2fs: Use a folio in f2fs_readdir()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (44 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 045/153] f2fs: Use a folio in f2fs_delete_entry() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 047/153] f2fs: Remove f2fs_find_data_page() Matthew Wilcox (Oracle)
                   ` (108 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio instead of a page and use it throughout.  Also put the folio
before checking the error so we only have to do it once.  Saves two
hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index a24f04fc9073..2334995c9f9b 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -1041,7 +1041,6 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
 	struct inode *inode = file_inode(file);
 	unsigned long npages = dir_blocks(inode);
 	struct f2fs_dentry_block *dentry_blk = NULL;
-	struct page *dentry_page = NULL;
 	struct file_ra_state *ra = &file->f_ra;
 	loff_t start_pos = ctx->pos;
 	unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK);
@@ -1065,6 +1064,7 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
 	}
 
 	for (; n < npages; ctx->pos = n * NR_DENTRY_IN_BLOCK) {
+		struct folio *dentry_folio;
 		pgoff_t next_pgofs;
 
 		/* allow readdir() to be interrupted */
@@ -1079,9 +1079,9 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
 			page_cache_sync_readahead(inode->i_mapping, ra, file, n,
 				min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
 
-		dentry_page = f2fs_find_data_page(inode, n, &next_pgofs);
-		if (IS_ERR(dentry_page)) {
-			err = PTR_ERR(dentry_page);
+		dentry_folio = f2fs_find_data_folio(inode, n, &next_pgofs);
+		if (IS_ERR(dentry_folio)) {
+			err = PTR_ERR(dentry_folio);
 			if (err == -ENOENT) {
 				err = 0;
 				n = next_pgofs;
@@ -1091,18 +1091,15 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
 			}
 		}
 
-		dentry_blk = page_address(dentry_page);
+		dentry_blk = folio_address(dentry_folio);
 
 		make_dentry_ptr_block(inode, &d, dentry_blk);
 
 		err = f2fs_fill_dentries(ctx, &d,
 				n * NR_DENTRY_IN_BLOCK, &fstr);
-		if (err) {
-			f2fs_put_page(dentry_page, 0);
+		f2fs_folio_put(dentry_folio, false);
+		if (err)
 			break;
-		}
-
-		f2fs_put_page(dentry_page, 0);
 
 		n++;
 	}
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 047/153] f2fs: Remove f2fs_find_data_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (45 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 046/153] f2fs: Use a folio in f2fs_readdir() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 048/153] f2fs: Use a folio in f2fs_get_new_data_page() Matthew Wilcox (Oracle)
                   ` (107 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have now been converted to call f2fs_find_data_folio().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index b6ca1e5a721e..788a8cd55603 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3983,14 +3983,6 @@ int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi);
 void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi);
 extern const struct iomap_ops f2fs_iomap_ops;
 
-static inline struct page *f2fs_find_data_page(struct inode *inode,
-		pgoff_t index, pgoff_t *next_pgofs)
-{
-	struct folio *folio = f2fs_find_data_folio(inode, index, next_pgofs);
-
-	return &folio->page;
-}
-
 static inline struct page *f2fs_get_lock_data_page(struct inode *inode,
 		pgoff_t index, bool for_write)
 {
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 048/153] f2fs: Use a folio in f2fs_get_new_data_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (46 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 047/153] f2fs: Remove f2fs_find_data_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 049/153] f2fs: Use a folio in f2fs_migrate_blocks() Matthew Wilcox (Oracle)
                   ` (106 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get folios from the pagecache instead of pages.  Remove five calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 23e37207ed90..9c79ceed1c6d 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1346,12 +1346,12 @@ struct page *f2fs_get_new_data_page(struct inode *inode,
 		struct page *ipage, pgoff_t index, bool new_i_size)
 {
 	struct address_space *mapping = inode->i_mapping;
-	struct page *page;
+	struct folio *folio;
 	struct dnode_of_data dn;
 	int err;
 
-	page = f2fs_grab_cache_page(mapping, index, true);
-	if (!page) {
+	folio = f2fs_grab_cache_folio(mapping, index, true);
+	if (IS_ERR(folio)) {
 		/*
 		 * before exiting, we should make sure ipage will be released
 		 * if any error occur.
@@ -1363,33 +1363,33 @@ struct page *f2fs_get_new_data_page(struct inode *inode,
 	set_new_dnode(&dn, inode, ipage, NULL, 0);
 	err = f2fs_reserve_block(&dn, index);
 	if (err) {
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 		return ERR_PTR(err);
 	}
 	if (!ipage)
 		f2fs_put_dnode(&dn);
 
-	if (PageUptodate(page))
+	if (folio_test_uptodate(folio))
 		goto got_it;
 
 	if (dn.data_blkaddr == NEW_ADDR) {
-		zero_user_segment(page, 0, PAGE_SIZE);
-		if (!PageUptodate(page))
-			SetPageUptodate(page);
+		folio_zero_segment(folio, 0, folio_size(folio));
+		if (!folio_test_uptodate(folio))
+			folio_mark_uptodate(folio);
 	} else {
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 
 		/* if ipage exists, blkaddr should be NEW_ADDR */
 		f2fs_bug_on(F2FS_I_SB(inode), ipage);
-		page = f2fs_get_lock_data_page(inode, index, true);
-		if (IS_ERR(page))
-			return page;
+		folio = f2fs_get_lock_data_folio(inode, index, true);
+		if (IS_ERR(folio))
+			return &folio->page;
 	}
 got_it:
 	if (new_i_size && i_size_read(inode) <
 				((loff_t)(index + 1) << PAGE_SHIFT))
 		f2fs_i_size_write(inode, ((loff_t)(index + 1) << PAGE_SHIFT));
-	return page;
+	return &folio->page;
 }
 
 static int __allocate_data_block(struct dnode_of_data *dn, int seg_type)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 049/153] f2fs: Use a folio in f2fs_migrate_blocks()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (47 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 048/153] f2fs: Use a folio in f2fs_get_new_data_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 050/153] f2fs: Add f2fs_get_new_data_folio() Matthew Wilcox (Oracle)
                   ` (105 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio from the pagecache and use it throughout.  Removes two
calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 9c79ceed1c6d..2301daf57e56 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -3879,18 +3879,18 @@ static int f2fs_migrate_blocks(struct inode *inode, block_t start_blk,
 		set_inode_flag(inode, FI_SKIP_WRITES);
 
 		for (blkofs = 0; blkofs <= blkofs_end; blkofs++) {
-			struct page *page;
+			struct folio *folio;
 			unsigned int blkidx = secidx * blk_per_sec + blkofs;
 
-			page = f2fs_get_lock_data_page(inode, blkidx, true);
-			if (IS_ERR(page)) {
+			folio = f2fs_get_lock_data_folio(inode, blkidx, true);
+			if (IS_ERR(folio)) {
 				f2fs_up_write(&sbi->pin_sem);
-				ret = PTR_ERR(page);
+				ret = PTR_ERR(folio);
 				goto done;
 			}
 
-			set_page_dirty(page);
-			f2fs_put_page(page, 1);
+			folio_mark_dirty(folio);
+			f2fs_folio_put(folio, true);
 		}
 
 		clear_inode_flag(inode, FI_SKIP_WRITES);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 050/153] f2fs: Add f2fs_get_new_data_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (48 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 049/153] f2fs: Use a folio in f2fs_migrate_blocks() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 051/153] highmem: Add memcpy_folio() Matthew Wilcox (Oracle)
                   ` (104 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert f2fs_get_new_data_page() into f2fs_get_new_data_folio() and
add a f2fs_get_new_data_page() wrapper.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 6 +++---
 fs/f2fs/f2fs.h | 9 ++++++++-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 2301daf57e56..52ca44b3c687 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1342,7 +1342,7 @@ struct folio *f2fs_get_lock_data_folio(struct inode *inode, pgoff_t index,
  * Note that, ipage is set only by make_empty_dir, and if any error occur,
  * ipage should be released by this function.
  */
-struct page *f2fs_get_new_data_page(struct inode *inode,
+struct folio *f2fs_get_new_data_folio(struct inode *inode,
 		struct page *ipage, pgoff_t index, bool new_i_size)
 {
 	struct address_space *mapping = inode->i_mapping;
@@ -1383,13 +1383,13 @@ struct page *f2fs_get_new_data_page(struct inode *inode,
 		f2fs_bug_on(F2FS_I_SB(inode), ipage);
 		folio = f2fs_get_lock_data_folio(inode, index, true);
 		if (IS_ERR(folio))
-			return &folio->page;
+			return folio;
 	}
 got_it:
 	if (new_i_size && i_size_read(inode) <
 				((loff_t)(index + 1) << PAGE_SHIFT))
 		f2fs_i_size_write(inode, ((loff_t)(index + 1) << PAGE_SHIFT));
-	return &folio->page;
+	return folio;
 }
 
 static int __allocate_data_block(struct dnode_of_data *dn, int seg_type)
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 788a8cd55603..2dcc3b48221b 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3958,7 +3958,7 @@ struct folio *f2fs_find_data_folio(struct inode *inode, pgoff_t index,
 		pgoff_t *next_pgofs);
 struct folio *f2fs_get_lock_data_folio(struct inode *inode, pgoff_t index,
 			bool for_write);
-struct page *f2fs_get_new_data_page(struct inode *inode,
+struct folio *f2fs_get_new_data_folio(struct inode *inode,
 			struct page *ipage, pgoff_t index, bool new_i_size);
 int f2fs_do_write_data_page(struct f2fs_io_info *fio);
 int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map, int flag);
@@ -3983,6 +3983,13 @@ int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi);
 void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi);
 extern const struct iomap_ops f2fs_iomap_ops;
 
+static inline
+struct page *f2fs_get_new_data_page(struct inode *inode,
+			struct page *ipage, pgoff_t index, bool new_i_size)
+{
+	return &f2fs_get_new_data_folio(inode, ipage, index, new_i_size)->page;
+}
+
 static inline struct page *f2fs_get_lock_data_page(struct inode *inode,
 		pgoff_t index, bool for_write)
 {
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 051/153] highmem: Add memcpy_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (49 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 050/153] f2fs: Add f2fs_get_new_data_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 052/153] f2fs: Use a folio in __clone_blkaddrs() Matthew Wilcox (Oracle)
                   ` (103 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The folio equivalent of memcpy_page().  It should correctly and
efficiently manage large folios:

 - If one, neither or both is highmem
 - If (either or both) offset+len crosses a page boundary
 - If the two offsets are congruent or not

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 include/linux/highmem.h | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index 5c6bea81a90e..fd72f66b872a 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -404,6 +404,33 @@ static inline void memcpy_page(struct page *dst_page, size_t dst_off,
 	kunmap_local(dst);
 }
 
+static inline void memcpy_folio(struct folio *dst_folio, size_t dst_off,
+		struct folio *src_folio, size_t src_off, size_t len)
+{
+	VM_BUG_ON(dst_off + len > folio_size(dst_folio));
+	VM_BUG_ON(src_off + len > folio_size(src_folio));
+
+	do {
+		char *dst = kmap_local_folio(dst_folio, dst_off);
+		const char *src = kmap_local_folio(src_folio, src_off);
+		size_t chunk = len;
+
+		if (folio_test_highmem(dst_folio) &&
+		    chunk > PAGE_SIZE - offset_in_page(dst_off))
+			chunk = PAGE_SIZE - offset_in_page(dst_off);
+		if (folio_test_highmem(src_folio) &&
+		    chunk > PAGE_SIZE - offset_in_page(src_off))
+			chunk = PAGE_SIZE - offset_in_page(src_off);
+		memcpy(dst, src, chunk);
+		kunmap_local(src);
+		kunmap_local(dst);
+
+		dst_off += chunk;
+		src_off += chunk;
+		len -= chunk;
+	} while (len > 0);
+}
+
 static inline void memset_page(struct page *page, size_t offset, int val,
 			       size_t len)
 {
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 052/153] f2fs: Use a folio in __clone_blkaddrs()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (50 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 051/153] highmem: Add memcpy_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 053/153] f2fs: Use a folio in f2fs_defragment_range() Matthew Wilcox (Oracle)
                   ` (102 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Removes five hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/file.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 25f69a308dde..5529b740c37f 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1410,26 +1410,26 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
 
 			f2fs_put_dnode(&dn);
 		} else {
-			struct page *psrc, *pdst;
+			struct folio *fsrc, *fdst;
 
-			psrc = f2fs_get_lock_data_page(src_inode,
+			fsrc = f2fs_get_lock_data_folio(src_inode,
 							src + i, true);
-			if (IS_ERR(psrc))
-				return PTR_ERR(psrc);
-			pdst = f2fs_get_new_data_page(dst_inode, NULL, dst + i,
+			if (IS_ERR(fsrc))
+				return PTR_ERR(fsrc);
+			fdst = f2fs_get_new_data_folio(dst_inode, NULL, dst + i,
 								true);
-			if (IS_ERR(pdst)) {
-				f2fs_put_page(psrc, 1);
-				return PTR_ERR(pdst);
+			if (IS_ERR(fdst)) {
+				f2fs_folio_put(fsrc, true);
+				return PTR_ERR(fdst);
 			}
 
-			f2fs_wait_on_page_writeback(pdst, DATA, true, true);
+			f2fs_folio_wait_writeback(fdst, DATA, true, true);
 
-			memcpy_page(pdst, 0, psrc, 0, PAGE_SIZE);
-			set_page_dirty(pdst);
-			set_page_private_gcing(pdst);
-			f2fs_put_page(pdst, 1);
-			f2fs_put_page(psrc, 1);
+			memcpy_folio(fdst, 0, fsrc, 0, PAGE_SIZE);
+			folio_mark_dirty(fdst);
+			set_page_private_gcing(&fdst->page);
+			f2fs_folio_put(fdst, true);
+			f2fs_folio_put(fsrc, true);
 
 			ret = f2fs_truncate_hole(src_inode,
 						src + i, src + i + 1);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 053/153] f2fs: Use a folio in f2fs_defragment_range()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (51 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 052/153] f2fs: Use a folio in __clone_blkaddrs() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 054/153] f2fs: Remove f2fs_get_lock_data_page() Matthew Wilcox (Oracle)
                   ` (101 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove three hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/file.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 5529b740c37f..ab46fb272cc2 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -2920,19 +2920,19 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
 		idx = map.m_lblk;
 		while (idx < map.m_lblk + map.m_len &&
 						cnt < BLKS_PER_SEG(sbi)) {
-			struct page *page;
+			struct folio *folio;
 
-			page = f2fs_get_lock_data_page(inode, idx, true);
-			if (IS_ERR(page)) {
-				err = PTR_ERR(page);
+			folio = f2fs_get_lock_data_folio(inode, idx, true);
+			if (IS_ERR(folio)) {
+				err = PTR_ERR(folio);
 				goto clear_out;
 			}
 
-			f2fs_wait_on_page_writeback(page, DATA, true, true);
+			f2fs_folio_wait_writeback(folio, DATA, true, true);
 
-			set_page_dirty(page);
-			set_page_private_gcing(page);
-			f2fs_put_page(page, 1);
+			folio_mark_dirty(folio);
+			set_page_private_gcing(&folio->page);
+			f2fs_folio_put(folio, true);
 
 			idx++;
 			cnt++;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 054/153] f2fs: Remove f2fs_get_lock_data_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (52 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 053/153] f2fs: Use a folio in f2fs_defragment_range() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 055/153] f2fs: Use a folio in fill_zero() Matthew Wilcox (Oracle)
                   ` (100 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have now been converted to f2fs_get_lock_data_folio(),
so remove this wrapper.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 2dcc3b48221b..ca6ad66c9078 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3990,14 +3990,6 @@ struct page *f2fs_get_new_data_page(struct inode *inode,
 	return &f2fs_get_new_data_folio(inode, ipage, index, new_i_size)->page;
 }
 
-static inline struct page *f2fs_get_lock_data_page(struct inode *inode,
-		pgoff_t index, bool for_write)
-{
-	struct folio *folio = f2fs_get_lock_data_folio(inode, index, for_write);
-
-	return &folio->page;
-}
-
 /*
  * gc.c
  */
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 055/153] f2fs: Use a folio in fill_zero()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (53 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 054/153] f2fs: Remove f2fs_get_lock_data_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 056/153] f2fs: Use a folio in f2fs_add_regular_entry() Matthew Wilcox (Oracle)
                   ` (99 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove three hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/file.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index ab46fb272cc2..90e71b54e1d0 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1161,7 +1161,7 @@ static int fill_zero(struct inode *inode, pgoff_t index,
 					loff_t start, loff_t len)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	struct page *page;
+	struct folio *folio;
 
 	if (!len)
 		return 0;
@@ -1169,16 +1169,16 @@ static int fill_zero(struct inode *inode, pgoff_t index,
 	f2fs_balance_fs(sbi, true);
 
 	f2fs_lock_op(sbi);
-	page = f2fs_get_new_data_page(inode, NULL, index, false);
+	folio = f2fs_get_new_data_folio(inode, NULL, index, false);
 	f2fs_unlock_op(sbi);
 
-	if (IS_ERR(page))
-		return PTR_ERR(page);
+	if (IS_ERR(folio))
+		return PTR_ERR(folio);
 
-	f2fs_wait_on_page_writeback(page, DATA, true, true);
-	zero_user(page, start, len);
-	set_page_dirty(page);
-	f2fs_put_page(page, 1);
+	f2fs_folio_wait_writeback(folio, DATA, true, true);
+	folio_zero_range(folio, start, len);
+	folio_mark_dirty(folio);
+	f2fs_folio_put(folio, true);
 	return 0;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 056/153] f2fs: Use a folio in f2fs_add_regular_entry()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (54 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 055/153] f2fs: Use a folio in fill_zero() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 057/153] f2fs: Use a folio in make_empty_dir() Matthew Wilcox (Oracle)
                   ` (98 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove three hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 2334995c9f9b..1e939c251752 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -664,7 +664,7 @@ int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 	unsigned int current_depth;
 	unsigned long bidx, block;
 	unsigned int nbucket, nblock;
-	struct page *dentry_page = NULL;
+	struct folio *dentry_folio = NULL;
 	struct f2fs_dentry_block *dentry_blk = NULL;
 	struct f2fs_dentry_ptr d;
 	struct page *page = NULL;
@@ -697,24 +697,24 @@ int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 				(le32_to_cpu(fname->hash) % nbucket));
 
 	for (block = bidx; block <= (bidx + nblock - 1); block++) {
-		dentry_page = f2fs_get_new_data_page(dir, NULL, block, true);
-		if (IS_ERR(dentry_page))
-			return PTR_ERR(dentry_page);
+		dentry_folio = f2fs_get_new_data_folio(dir, NULL, block, true);
+		if (IS_ERR(dentry_folio))
+			return PTR_ERR(dentry_folio);
 
-		dentry_blk = page_address(dentry_page);
+		dentry_blk = folio_address(dentry_folio);
 		bit_pos = f2fs_room_for_filename(&dentry_blk->dentry_bitmap,
 						slots, NR_DENTRY_IN_BLOCK);
 		if (bit_pos < NR_DENTRY_IN_BLOCK)
 			goto add_dentry;
 
-		f2fs_put_page(dentry_page, 1);
+		f2fs_folio_put(dentry_folio, true);
 	}
 
 	/* Move to next level to find the empty slot for new dentry */
 	++level;
 	goto start;
 add_dentry:
-	f2fs_wait_on_page_writeback(dentry_page, DATA, true, true);
+	f2fs_folio_wait_writeback(dentry_folio, DATA, true, true);
 
 	if (inode) {
 		f2fs_down_write(&F2FS_I(inode)->i_sem);
@@ -729,7 +729,7 @@ int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 	f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash,
 			   bit_pos);
 
-	set_page_dirty(dentry_page);
+	folio_mark_dirty(dentry_folio);
 
 	if (inode) {
 		f2fs_i_pino_write(inode, dir->i_ino);
@@ -746,7 +746,7 @@ int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 	if (inode)
 		f2fs_up_write(&F2FS_I(inode)->i_sem);
 
-	f2fs_put_page(dentry_page, 1);
+	f2fs_folio_put(dentry_folio, true);
 
 	return err;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 057/153] f2fs: Use a folio in make_empty_dir()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (55 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 056/153] f2fs: Use a folio in f2fs_add_regular_entry() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 058/153] f2fs: Remove f2fs_get_new_data_page() Matthew Wilcox (Oracle)
                   ` (97 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove two hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 1e939c251752..2cc4ad636290 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -493,24 +493,24 @@ void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
 static int make_empty_dir(struct inode *inode,
 		struct inode *parent, struct page *page)
 {
-	struct page *dentry_page;
+	struct folio *dentry_folio;
 	struct f2fs_dentry_block *dentry_blk;
 	struct f2fs_dentry_ptr d;
 
 	if (f2fs_has_inline_dentry(inode))
 		return f2fs_make_empty_inline_dir(inode, parent, page);
 
-	dentry_page = f2fs_get_new_data_page(inode, page, 0, true);
-	if (IS_ERR(dentry_page))
-		return PTR_ERR(dentry_page);
+	dentry_folio = f2fs_get_new_data_folio(inode, page, 0, true);
+	if (IS_ERR(dentry_folio))
+		return PTR_ERR(dentry_folio);
 
-	dentry_blk = page_address(dentry_page);
+	dentry_blk = folio_address(dentry_folio);
 
 	make_dentry_ptr_block(NULL, &d, dentry_blk);
 	f2fs_do_make_empty_dir(inode, parent, &d);
 
-	set_page_dirty(dentry_page);
-	f2fs_put_page(dentry_page, 1);
+	folio_mark_dirty(dentry_folio);
+	f2fs_folio_put(dentry_folio, true);
 	return 0;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 058/153] f2fs: Remove f2fs_get_new_data_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (56 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 057/153] f2fs: Use a folio in make_empty_dir() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 059/153] f2fs: Use a folio in f2fs_xattr_fiemap() Matthew Wilcox (Oracle)
                   ` (96 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have been converted to call f2fs_get_new_data_folio()
so delete this wrapper.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 2 +-
 fs/f2fs/f2fs.h | 7 -------
 2 files changed, 1 insertion(+), 8 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 52ca44b3c687..09b440e1dd12 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1258,7 +1258,7 @@ struct folio *f2fs_get_read_data_folio(struct inode *inode, pgoff_t index,
 	 * A new dentry page is allocated but not able to be written, since its
 	 * new inode page couldn't be allocated due to -ENOSPC.
 	 * In such the case, its blkaddr can be remained as NEW_ADDR.
-	 * see, f2fs_add_link -> f2fs_get_new_data_page ->
+	 * see, f2fs_add_link -> f2fs_get_new_data_folio ->
 	 * f2fs_init_inode_metadata.
 	 */
 	if (dn.data_blkaddr == NEW_ADDR) {
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index ca6ad66c9078..5ad799c12ce6 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3983,13 +3983,6 @@ int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi);
 void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi);
 extern const struct iomap_ops f2fs_iomap_ops;
 
-static inline
-struct page *f2fs_get_new_data_page(struct inode *inode,
-			struct page *ipage, pgoff_t index, bool new_i_size)
-{
-	return &f2fs_get_new_data_folio(inode, ipage, index, new_i_size)->page;
-}
-
 /*
  * gc.c
  */
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 059/153] f2fs: Use a folio in f2fs_xattr_fiemap()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (57 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 058/153] f2fs: Remove f2fs_get_new_data_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 060/153] f2fs: Use a folio in ra_data_block() Matthew Wilcox (Oracle)
                   ` (95 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove four hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 09b440e1dd12..af0106e4f184 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1826,7 +1826,6 @@ static int f2fs_xattr_fiemap(struct inode *inode,
 				struct fiemap_extent_info *fieinfo)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	struct page *page;
 	struct node_info ni;
 	__u64 phys = 0, len;
 	__u32 flags;
@@ -1835,15 +1834,15 @@ static int f2fs_xattr_fiemap(struct inode *inode,
 
 	if (f2fs_has_inline_xattr(inode)) {
 		int offset;
+		struct folio *folio = f2fs_grab_cache_folio(NODE_MAPPING(sbi),
+				inode->i_ino, false);
 
-		page = f2fs_grab_cache_page(NODE_MAPPING(sbi),
-						inode->i_ino, false);
-		if (!page)
-			return -ENOMEM;
+		if (IS_ERR(folio))
+			return PTR_ERR(folio);
 
 		err = f2fs_get_node_info(sbi, inode->i_ino, &ni, false);
 		if (err) {
-			f2fs_put_page(page, 1);
+			f2fs_folio_put(folio, true);
 			return err;
 		}
 
@@ -1855,7 +1854,7 @@ static int f2fs_xattr_fiemap(struct inode *inode,
 		phys += offset;
 		len = inline_xattr_size(inode);
 
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 
 		flags = FIEMAP_EXTENT_DATA_INLINE | FIEMAP_EXTENT_NOT_ALIGNED;
 
@@ -1869,20 +1868,22 @@ static int f2fs_xattr_fiemap(struct inode *inode,
 	}
 
 	if (xnid) {
-		page = f2fs_grab_cache_page(NODE_MAPPING(sbi), xnid, false);
-		if (!page)
-			return -ENOMEM;
+		struct folio *folio = f2fs_grab_cache_folio(NODE_MAPPING(sbi),
+				xnid, false);
+
+		if (IS_ERR(folio))
+			return PTR_ERR(folio);
 
 		err = f2fs_get_node_info(sbi, xnid, &ni, false);
 		if (err) {
-			f2fs_put_page(page, 1);
+			f2fs_folio_put(folio, true);
 			return err;
 		}
 
 		phys = F2FS_BLK_TO_BYTES(ni.blk_addr);
 		len = inode->i_sb->s_blocksize;
 
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 
 		flags = FIEMAP_EXTENT_LAST;
 	}
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 060/153] f2fs: Use a folio in ra_data_block()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (58 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 059/153] f2fs: Use a folio in f2fs_xattr_fiemap() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 061/153] f2fs: Use a folio in move_data_block() Matthew Wilcox (Oracle)
                   ` (94 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove three hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/gc.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 1f3c275099e5..bdc1d079c7b3 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -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 @@ static int ra_data_block(struct inode *inode, pgoff_t index)
 					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 @@ static int ra_data_block(struct inode *inode, pgoff_t index)
 	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;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 061/153] f2fs: Use a folio in move_data_block()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (59 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 060/153] f2fs: Use a folio in ra_data_block() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 062/153] f2fs: Use a folio in f2fs_convert_inline_inode() Matthew Wilcox (Oracle)
                   ` (93 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove 11 hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/gc.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index bdc1d079c7b3..45b1ffa5ea93 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1307,8 +1307,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 	struct dnode_of_data dn;
 	struct f2fs_summary sum;
 	struct node_info ni;
-	struct page *page;
-	struct folio *mfolio;
+	struct folio *folio, *mfolio;
 	block_t newaddr;
 	int err = 0;
 	bool lfs_mode = f2fs_lfs_mode(fio.sbi);
@@ -1317,9 +1316,9 @@ static int move_data_block(struct inode *inode, block_t bidx,
 				CURSEG_ALL_DATA_ATGC : CURSEG_COLD_DATA;
 
 	/* do not read out */
-	page = f2fs_grab_cache_page(mapping, bidx, false);
-	if (!page)
-		return -ENOMEM;
+	folio = f2fs_grab_cache_folio(mapping, bidx, false);
+	if (IS_ERR(folio))
+		return PTR_ERR(folio);
 
 	if (!check_valid_map(F2FS_I_SB(inode), segno, off)) {
 		err = -ENOENT;
@@ -1336,7 +1335,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 		goto out;
 
 	if (unlikely(dn.data_blkaddr == NULL_ADDR)) {
-		ClearPageUptodate(page);
+		folio_clear_uptodate(folio);
 		err = -ENOENT;
 		goto put_out;
 	}
@@ -1345,7 +1344,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 	 * 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);
 
@@ -1354,7 +1353,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 		goto put_out;
 
 	/* read page */
-	fio.page = page;
+	fio.page = &folio->page;
 	fio.new_blkaddr = fio.old_blkaddr = dn.data_blkaddr;
 
 	if (lfs_mode)
@@ -1445,7 +1444,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 put_out:
 	f2fs_put_dnode(&dn);
 out:
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 	return err;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 062/153] f2fs: Use a folio in f2fs_convert_inline_inode()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (60 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 061/153] f2fs: Use a folio in move_data_block() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 063/153] f2fs: Use a folio in f2fs_move_inline_dirents() Matthew Wilcox (Oracle)
                   ` (92 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index ad92e9008781..4b0a7062a0e0 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -218,7 +218,7 @@ int f2fs_convert_inline_inode(struct inode *inode)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct dnode_of_data dn;
-	struct page *ipage, *page;
+	struct folio *ifolio, *folio;
 	int err = 0;
 
 	if (f2fs_hw_is_readonly(sbi) || f2fs_readonly(sbi->sb))
@@ -231,28 +231,28 @@ int f2fs_convert_inline_inode(struct inode *inode)
 	if (err)
 		return err;
 
-	page = f2fs_grab_cache_page(inode->i_mapping, 0, false);
-	if (!page)
-		return -ENOMEM;
+	folio = f2fs_grab_cache_folio(inode->i_mapping, 0, false);
+	if (IS_ERR(folio))
+		return PTR_ERR(folio);
 
 	f2fs_lock_op(sbi);
 
-	ipage = f2fs_get_inode_page(sbi, inode->i_ino);
-	if (IS_ERR(ipage)) {
-		err = PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
+	if (IS_ERR(ifolio)) {
+		err = PTR_ERR(ifolio);
 		goto out;
 	}
 
-	set_new_dnode(&dn, inode, ipage, ipage, 0);
+	set_new_dnode(&dn, inode, &ifolio->page, &ifolio->page, 0);
 
 	if (f2fs_has_inline_data(inode))
-		err = f2fs_convert_inline_page(&dn, page);
+		err = f2fs_convert_inline_page(&dn, &folio->page);
 
 	f2fs_put_dnode(&dn);
 out:
 	f2fs_unlock_op(sbi);
 
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 
 	if (!err)
 		f2fs_balance_fs(sbi, dn.node_changed);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 063/153] f2fs: Use a folio in f2fs_move_inline_dirents()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (61 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 062/153] f2fs: Use a folio in f2fs_convert_inline_inode() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 064/153] f2fs: Add f2fs_new_node_folio() Matthew Wilcox (Oracle)
                   ` (91 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove eight hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 4b0a7062a0e0..9bac2c4e8937 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -410,16 +410,16 @@ int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
 static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
 							void *inline_dentry)
 {
-	struct page *page;
+	struct folio *folio;
 	struct dnode_of_data dn;
 	struct f2fs_dentry_block *dentry_blk;
 	struct f2fs_dentry_ptr src, dst;
 	int err;
 
-	page = f2fs_grab_cache_page(dir->i_mapping, 0, true);
-	if (!page) {
+	folio = f2fs_grab_cache_folio(dir->i_mapping, 0, true);
+	if (IS_ERR(folio)) {
 		f2fs_put_page(ipage, 1);
-		return -ENOMEM;
+		return PTR_ERR(folio);
 	}
 
 	set_new_dnode(&dn, dir, ipage, NULL, 0);
@@ -429,17 +429,17 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
 
 	if (unlikely(dn.data_blkaddr != NEW_ADDR)) {
 		f2fs_put_dnode(&dn);
-		set_sbi_flag(F2FS_P_SB(page), SBI_NEED_FSCK);
-		f2fs_warn(F2FS_P_SB(page), "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, run fsck to fix.",
+		set_sbi_flag(F2FS_F_SB(folio), SBI_NEED_FSCK);
+		f2fs_warn(F2FS_F_SB(folio), "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, run fsck to fix.",
 			  __func__, dir->i_ino, dn.data_blkaddr);
-		f2fs_handle_error(F2FS_P_SB(page), ERROR_INVALID_BLKADDR);
+		f2fs_handle_error(F2FS_F_SB(folio), ERROR_INVALID_BLKADDR);
 		err = -EFSCORRUPTED;
 		goto out;
 	}
 
-	f2fs_wait_on_page_writeback(page, DATA, true, true);
+	f2fs_folio_wait_writeback(folio, DATA, true, true);
 
-	dentry_blk = page_address(page);
+	dentry_blk = folio_address(folio);
 
 	/*
 	 * Start by zeroing the full block, to ensure that all unused space is
@@ -455,9 +455,9 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
 	memcpy(dst.dentry, src.dentry, SIZE_OF_DIR_ENTRY * src.max);
 	memcpy(dst.filename, src.filename, src.max * F2FS_SLOT_LEN);
 
-	if (!PageUptodate(page))
-		SetPageUptodate(page);
-	set_page_dirty(page);
+	if (!folio_test_uptodate(folio))
+		folio_mark_uptodate(folio);
+	folio_mark_dirty(folio);
 
 	/* clear inline dir and flag after data writeback */
 	f2fs_truncate_inline_inode(dir, ipage, 0);
@@ -477,7 +477,7 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
 	if (i_size_read(dir) < PAGE_SIZE)
 		f2fs_i_size_write(dir, PAGE_SIZE);
 out:
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 	return err;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 064/153] f2fs: Add f2fs_new_node_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (62 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 063/153] f2fs: Use a folio in f2fs_move_inline_dirents() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 065/153] f2fs: Use a folio in f2fs_ra_node_page() Matthew Wilcox (Oracle)
                   ` (90 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert f2fs_new_node_page() to f2fs_new_node_folio() and add
a compatibility wrapper.  Removes five hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h |  8 +++++++-
 fs/f2fs/node.c | 28 ++++++++++++++--------------
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 5ad799c12ce6..11e63c5f524a 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3737,7 +3737,7 @@ int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi,
 					unsigned int seq_id);
 int f2fs_remove_inode_page(struct inode *inode);
 struct page *f2fs_new_inode_page(struct inode *inode);
-struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs);
+struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs);
 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
@@ -3768,6 +3768,12 @@ void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi);
 int __init f2fs_create_node_manager_caches(void);
 void f2fs_destroy_node_manager_caches(void);
 
+static inline
+struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
+{
+	return &f2fs_new_node_folio(dn, ofs)->page;
+}
+
 /*
  * segment.c
  */
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 34dc61a131bf..5fe8f48b2ac5 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1320,19 +1320,19 @@ struct page *f2fs_new_inode_page(struct inode *inode)
 	return f2fs_new_node_page(&dn, 0);
 }
 
-struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
+struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
 	struct node_info new_ni;
-	struct page *page;
+	struct folio *folio;
 	int err;
 
 	if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC)))
 		return ERR_PTR(-EPERM);
 
-	page = f2fs_grab_cache_page(NODE_MAPPING(sbi), dn->nid, false);
-	if (!page)
-		return ERR_PTR(-ENOMEM);
+	folio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), dn->nid, false);
+	if (IS_ERR(folio))
+		return folio;
 
 	if (unlikely((err = inc_valid_node_count(sbi, dn->inode, !ofs))))
 		goto fail;
@@ -1363,12 +1363,12 @@ struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
 	new_ni.version = 0;
 	set_node_addr(sbi, &new_ni, NEW_ADDR, false);
 
-	f2fs_wait_on_page_writeback(page, NODE, true, true);
-	fill_node_footer(page, dn->nid, dn->inode->i_ino, ofs, true);
-	set_cold_node(page, S_ISDIR(dn->inode->i_mode));
-	if (!PageUptodate(page))
-		SetPageUptodate(page);
-	if (set_page_dirty(page))
+	f2fs_folio_wait_writeback(folio, NODE, true, true);
+	fill_node_footer(&folio->page, dn->nid, dn->inode->i_ino, ofs, true);
+	set_cold_node(&folio->page, S_ISDIR(dn->inode->i_mode));
+	if (!folio_test_uptodate(folio))
+		folio_mark_uptodate(folio);
+	if (folio_mark_dirty(folio))
 		dn->node_changed = true;
 
 	if (f2fs_has_xattr_block(ofs))
@@ -1376,10 +1376,10 @@ struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
 
 	if (ofs == 0)
 		inc_valid_inode_count(sbi);
-	return page;
+	return folio;
 fail:
-	clear_node_page_dirty(page);
-	f2fs_put_page(page, 1);
+	clear_node_page_dirty(&folio->page);
+	f2fs_folio_put(folio, true);
 	return ERR_PTR(err);
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 065/153] f2fs: Use a folio in f2fs_ra_node_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (63 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 064/153] f2fs: Add f2fs_new_node_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 066/153] f2fs: Convert read_node_page() to read_node_folio() Matthew Wilcox (Oracle)
                   ` (89 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Save a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 5fe8f48b2ac5..083863557414 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1436,7 +1436,7 @@ static int read_node_page(struct page *page, blk_opf_t op_flags)
  */
 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
 {
-	struct page *apage;
+	struct folio *afolio;
 	int err;
 
 	if (!nid)
@@ -1444,16 +1444,16 @@ void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
 	if (f2fs_check_nid_range(sbi, nid))
 		return;
 
-	apage = xa_load(&NODE_MAPPING(sbi)->i_pages, nid);
-	if (apage)
+	afolio = xa_load(&NODE_MAPPING(sbi)->i_pages, nid);
+	if (afolio)
 		return;
 
-	apage = f2fs_grab_cache_page(NODE_MAPPING(sbi), nid, false);
-	if (!apage)
+	afolio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), nid, false);
+	if (IS_ERR(afolio))
 		return;
 
-	err = read_node_page(apage, REQ_RAHEAD);
-	f2fs_put_page(apage, err ? 1 : 0);
+	err = read_node_page(&afolio->page, REQ_RAHEAD);
+	f2fs_folio_put(afolio, err ? true : false);
 }
 
 static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 066/153] f2fs: Convert read_node_page() to read_node_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (64 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 065/153] f2fs: Use a folio in f2fs_ra_node_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 067/153] f2fs: Pass a folio to f2fs_inode_chksum_verify() Matthew Wilcox (Oracle)
                   ` (88 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Both callers now have a folio, so pass it in and remove the
conversion back to a folio.  Removes two calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 083863557414..f1f0d5159f2d 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1385,26 +1385,25 @@ struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs)
 
 /*
  * Caller should do after getting the following values.
- * 0: f2fs_put_page(page, 0)
- * LOCKED_PAGE or error: f2fs_put_page(page, 1)
+ * 0: f2fs_folio_put(folio, false)
+ * LOCKED_PAGE or error: f2fs_folio_put(folio, true)
  */
-static int read_node_page(struct page *page, blk_opf_t op_flags)
+static int read_node_folio(struct folio *folio, blk_opf_t op_flags)
 {
-	struct folio *folio = page_folio(page);
-	struct f2fs_sb_info *sbi = F2FS_P_SB(page);
+	struct f2fs_sb_info *sbi = F2FS_F_SB(folio);
 	struct node_info ni;
 	struct f2fs_io_info fio = {
 		.sbi = sbi,
 		.type = NODE,
 		.op = REQ_OP_READ,
 		.op_flags = op_flags,
-		.page = page,
+		.page = &folio->page,
 		.encrypted_page = NULL,
 	};
 	int err;
 
 	if (folio_test_uptodate(folio)) {
-		if (!f2fs_inode_chksum_verify(sbi, page)) {
+		if (!f2fs_inode_chksum_verify(sbi, &folio->page)) {
 			folio_clear_uptodate(folio);
 			return -EFSBADCRC;
 		}
@@ -1452,7 +1451,7 @@ void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
 	if (IS_ERR(afolio))
 		return;
 
-	err = read_node_page(&afolio->page, REQ_RAHEAD);
+	err = read_node_folio(afolio, REQ_RAHEAD);
 	f2fs_folio_put(afolio, err ? true : false);
 }
 
@@ -1495,7 +1494,7 @@ static struct folio *__get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid,
 	if (IS_ERR(folio))
 		return folio;
 
-	err = read_node_page(&folio->page, 0);
+	err = read_node_folio(folio, 0);
 	if (err < 0) {
 		goto out_put_err;
 	} else if (err == LOCKED_PAGE) {
@@ -1529,7 +1528,7 @@ static struct folio *__get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid,
 out_err:
 	folio_clear_uptodate(folio);
 out_put_err:
-	/* ENOENT comes from read_node_page which is not an error. */
+	/* ENOENT comes from read_node_folio which is not an error. */
 	if (err != -ENOENT)
 		f2fs_handle_page_eio(sbi, folio, NODE);
 	f2fs_folio_put(folio, true);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 067/153] f2fs: Pass a folio to f2fs_inode_chksum_verify()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (65 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 066/153] f2fs: Convert read_node_page() to read_node_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 068/153] f2fs: Use a folio in f2fs_recover_inode_page() Matthew Wilcox (Oracle)
                   ` (87 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Both callers now have a folio, so pass it in.  Removes three calls
to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h  |  2 +-
 fs/f2fs/inode.c | 16 ++++++++--------
 fs/f2fs/node.c  |  4 ++--
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 11e63c5f524a..d975d7f7d269 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3597,7 +3597,7 @@ int f2fs_pin_file_control(struct inode *inode, bool inc);
  * inode.c
  */
 void f2fs_set_inode_flags(struct inode *inode);
-bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page);
+bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct folio *folio);
 void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct page *page);
 struct inode *f2fs_iget(struct super_block *sb, unsigned long ino);
 struct inode *f2fs_iget_retry(struct super_block *sb, unsigned long ino);
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 83f862578fc8..38512f2d4b28 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -154,7 +154,7 @@ static __u32 f2fs_inode_chksum(struct f2fs_sb_info *sbi, struct page *page)
 	return chksum;
 }
 
-bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page)
+bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct folio *folio)
 {
 	struct f2fs_inode *ri;
 	__u32 provided, calculated;
@@ -163,21 +163,21 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page)
 		return true;
 
 #ifdef CONFIG_F2FS_CHECK_FS
-	if (!f2fs_enable_inode_chksum(sbi, page))
+	if (!f2fs_enable_inode_chksum(sbi, &folio->page))
 #else
-	if (!f2fs_enable_inode_chksum(sbi, page) ||
-			PageDirty(page) ||
-			folio_test_writeback(page_folio(page)))
+	if (!f2fs_enable_inode_chksum(sbi, &folio->page) ||
+			folio_test_dirty(folio) ||
+			folio_test_writeback(folio))
 #endif
 		return true;
 
-	ri = &F2FS_NODE(page)->i;
+	ri = &F2FS_NODE(&folio->page)->i;
 	provided = le32_to_cpu(ri->i_inode_checksum);
-	calculated = f2fs_inode_chksum(sbi, page);
+	calculated = f2fs_inode_chksum(sbi, &folio->page);
 
 	if (provided != calculated)
 		f2fs_warn(sbi, "checksum invalid, nid = %lu, ino_of_node = %x, %x vs. %x",
-			  page_folio(page)->index, ino_of_node(page),
+			  folio->index, ino_of_node(&folio->page),
 			  provided, calculated);
 
 	return provided == calculated;
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index f1f0d5159f2d..e63bfdd807b3 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1403,7 +1403,7 @@ static int read_node_folio(struct folio *folio, blk_opf_t op_flags)
 	int err;
 
 	if (folio_test_uptodate(folio)) {
-		if (!f2fs_inode_chksum_verify(sbi, &folio->page)) {
+		if (!f2fs_inode_chksum_verify(sbi, folio)) {
 			folio_clear_uptodate(folio);
 			return -EFSBADCRC;
 		}
@@ -1517,7 +1517,7 @@ static struct folio *__get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid,
 		goto out_err;
 	}
 
-	if (!f2fs_inode_chksum_verify(sbi, &folio->page)) {
+	if (!f2fs_inode_chksum_verify(sbi, folio)) {
 		err = -EFSBADCRC;
 		goto out_err;
 	}
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 068/153] f2fs: Use a folio in f2fs_recover_inode_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (66 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 067/153] f2fs: Pass a folio to f2fs_inode_chksum_verify() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 069/153] f2fs: Remove f2fs_grab_cache_page() Matthew Wilcox (Oracle)
                   ` (86 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Save four hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index e63bfdd807b3..225006e6ba32 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2817,7 +2817,7 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
 	struct f2fs_inode *src, *dst;
 	nid_t ino = ino_of_node(page);
 	struct node_info old_ni, new_ni;
-	struct page *ipage;
+	struct folio *ifolio;
 	int err;
 
 	err = f2fs_get_node_info(sbi, ino, &old_ni, false);
@@ -2827,8 +2827,8 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
 	if (unlikely(old_ni.blk_addr != NULL_ADDR))
 		return -EINVAL;
 retry:
-	ipage = f2fs_grab_cache_page(NODE_MAPPING(sbi), ino, false);
-	if (!ipage) {
+	ifolio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), ino, false);
+	if (IS_ERR(ifolio)) {
 		memalloc_retry_wait(GFP_NOFS);
 		goto retry;
 	}
@@ -2836,13 +2836,13 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
 	/* Should not use this inode from free nid list */
 	remove_free_nid(sbi, ino);
 
-	if (!PageUptodate(ipage))
-		SetPageUptodate(ipage);
-	fill_node_footer(ipage, ino, ino, 0, true);
-	set_cold_node(ipage, false);
+	if (!folio_test_uptodate(ifolio))
+		folio_mark_uptodate(ifolio);
+	fill_node_footer(&ifolio->page, ino, ino, 0, true);
+	set_cold_node(&ifolio->page, false);
 
 	src = F2FS_INODE(page);
-	dst = F2FS_INODE(ipage);
+	dst = F2FS_INODE(&ifolio->page);
 
 	memcpy(dst, src, offsetof(struct f2fs_inode, i_ext));
 	dst->i_size = 0;
@@ -2878,8 +2878,8 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
 		WARN_ON(1);
 	set_node_addr(sbi, &new_ni, NEW_ADDR, false);
 	inc_valid_inode_count(sbi);
-	set_page_dirty(ipage);
-	f2fs_put_page(ipage, 1);
+	folio_mark_dirty(ifolio);
+	f2fs_folio_put(ifolio, true);
 	return 0;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 069/153] f2fs: Remove f2fs_grab_cache_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (67 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 068/153] f2fs: Use a folio in f2fs_recover_inode_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 070/153] f2fs: Add f2fs_get_xnode_folio() Matthew Wilcox (Oracle)
                   ` (85 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have now been converted to f2fs_grab_cache_folio() so
we can remove this wrapper.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index d975d7f7d269..a32ac1ecb61c 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2849,16 +2849,6 @@ static inline struct folio *f2fs_grab_cache_folio(struct address_space *mapping,
 	return folio;
 }
 
-static inline struct page *f2fs_grab_cache_page(struct address_space *mapping,
-						pgoff_t index, bool for_write)
-{
-	struct folio *folio = f2fs_grab_cache_folio(mapping, index, for_write);
-
-	if (IS_ERR(folio))
-		return NULL;
-	return &folio->page;
-}
-
 static inline struct page *f2fs_pagecache_get_page(
 				struct address_space *mapping, pgoff_t index,
 				fgf_t fgp_flags, gfp_t gfp_mask)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 070/153] f2fs: Add f2fs_get_xnode_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (68 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 069/153] f2fs: Remove f2fs_grab_cache_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 071/153] f2fs: Use a folio in write_all_xattrs() Matthew Wilcox (Oracle)
                   ` (84 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The folio equivalent of f2fs_get_xnode_page().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 1 +
 fs/f2fs/node.c | 5 +++++
 2 files changed, 6 insertions(+)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index a32ac1ecb61c..8b5c81116653 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3732,6 +3732,7 @@ void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct page *f2fs_get_inode_page(struct f2fs_sb_info *sbi, pgoff_t ino);
+struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid);
 struct page *f2fs_get_xnode_page(struct f2fs_sb_info *sbi, pgoff_t xnid);
 struct page *f2fs_get_node_page_ra(struct page *parent, int start);
 int f2fs_move_node_page(struct page *node_page, int gc_type);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 225006e6ba32..3b73562c77f6 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1555,6 +1555,11 @@ struct page *f2fs_get_inode_page(struct f2fs_sb_info *sbi, pgoff_t ino)
 	return &folio->page;
 }
 
+struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid)
+{
+	return __get_node_folio(sbi, xnid, NULL, 0, NODE_TYPE_XATTR);
+}
+
 struct page *f2fs_get_xnode_page(struct f2fs_sb_info *sbi, pgoff_t xnid)
 {
 	struct folio *folio = __get_node_folio(sbi, xnid, NULL, 0,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 071/153] f2fs: Use a folio in write_all_xattrs()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (69 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 070/153] f2fs: Add f2fs_get_xnode_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 072/153] f2fs: Use a folio in f2fs_recover_xattr_data() Matthew Wilcox (Oracle)
                   ` (83 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Removes three hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/xattr.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index c691b35618ad..d58b1e44e133 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -436,7 +436,7 @@ static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
 	struct page *in_page = NULL;
 	void *xattr_addr;
 	void *inline_addr = NULL;
-	struct page *xpage;
+	struct folio *xfolio;
 	nid_t new_nid = 0;
 	int err = 0;
 
@@ -475,27 +475,27 @@ static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
 
 	/* write to xattr node block */
 	if (F2FS_I(inode)->i_xattr_nid) {
-		xpage = f2fs_get_xnode_page(sbi, F2FS_I(inode)->i_xattr_nid);
-		if (IS_ERR(xpage)) {
-			err = PTR_ERR(xpage);
+		xfolio = f2fs_get_xnode_folio(sbi, F2FS_I(inode)->i_xattr_nid);
+		if (IS_ERR(xfolio)) {
+			err = PTR_ERR(xfolio);
 			f2fs_alloc_nid_failed(sbi, new_nid);
 			goto in_page_out;
 		}
 		f2fs_bug_on(sbi, new_nid);
-		f2fs_wait_on_page_writeback(xpage, NODE, true, true);
+		f2fs_folio_wait_writeback(xfolio, NODE, true, true);
 	} else {
 		struct dnode_of_data dn;
 
 		set_new_dnode(&dn, inode, NULL, NULL, new_nid);
-		xpage = f2fs_new_node_page(&dn, XATTR_NODE_OFFSET);
-		if (IS_ERR(xpage)) {
-			err = PTR_ERR(xpage);
+		xfolio = f2fs_new_node_folio(&dn, XATTR_NODE_OFFSET);
+		if (IS_ERR(xfolio)) {
+			err = PTR_ERR(xfolio);
 			f2fs_alloc_nid_failed(sbi, new_nid);
 			goto in_page_out;
 		}
 		f2fs_alloc_nid_done(sbi, new_nid);
 	}
-	xattr_addr = page_address(xpage);
+	xattr_addr = folio_address(xfolio);
 
 	if (inline_size)
 		memcpy(inline_addr, txattr_addr, inline_size);
@@ -503,9 +503,9 @@ static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
 
 	if (inline_size)
 		set_page_dirty(ipage ? ipage : in_page);
-	set_page_dirty(xpage);
+	folio_mark_dirty(xfolio);
 
-	f2fs_put_page(xpage, 1);
+	f2fs_folio_put(xfolio, true);
 in_page_out:
 	f2fs_put_page(in_page, 1);
 	return err;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 072/153] f2fs: Use a folio in f2fs_recover_xattr_data()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (70 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 071/153] f2fs: Use a folio in write_all_xattrs() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 073/153] f2fs: Add f2fs_get_node_folio() Matthew Wilcox (Oracle)
                   ` (82 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove two calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 3b73562c77f6..ac3fa0147e1e 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2776,7 +2776,7 @@ int f2fs_recover_xattr_data(struct inode *inode, struct page *page)
 	nid_t new_xnid;
 	struct dnode_of_data dn;
 	struct node_info ni;
-	struct page *xpage;
+	struct folio *xfolio;
 	int err;
 
 	if (!prev_xnid)
@@ -2797,10 +2797,10 @@ int f2fs_recover_xattr_data(struct inode *inode, struct page *page)
 		return -ENOSPC;
 
 	set_new_dnode(&dn, inode, NULL, NULL, new_xnid);
-	xpage = f2fs_new_node_page(&dn, XATTR_NODE_OFFSET);
-	if (IS_ERR(xpage)) {
+	xfolio = f2fs_new_node_folio(&dn, XATTR_NODE_OFFSET);
+	if (IS_ERR(xfolio)) {
 		f2fs_alloc_nid_failed(sbi, new_xnid);
-		return PTR_ERR(xpage);
+		return PTR_ERR(xfolio);
 	}
 
 	f2fs_alloc_nid_done(sbi, new_xnid);
@@ -2808,11 +2808,11 @@ int f2fs_recover_xattr_data(struct inode *inode, struct page *page)
 
 	/* 3: update and set xattr node page dirty */
 	if (page) {
-		memcpy(F2FS_NODE(xpage), F2FS_NODE(page),
+		memcpy(F2FS_NODE(&xfolio->page), F2FS_NODE(page),
 				VALID_XATTR_BLOCK_SIZE);
-		set_page_dirty(xpage);
+		folio_mark_dirty(xfolio);
 	}
-	f2fs_put_page(xpage, 1);
+	f2fs_folio_put(xfolio, true);
 
 	return 0;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 073/153] f2fs: Add f2fs_get_node_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (71 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 072/153] f2fs: Use a folio in f2fs_recover_xattr_data() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 074/153] f2fs: Use folios in f2fs_get_dnode_of_data() Matthew Wilcox (Oracle)
                   ` (81 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The folio equivalent of f2fs_get_node_page().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 1 +
 fs/f2fs/node.c | 5 +++++
 2 files changed, 6 insertions(+)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 8b5c81116653..62ae222824e9 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3729,6 +3729,7 @@ int f2fs_remove_inode_page(struct inode *inode);
 struct page *f2fs_new_inode_page(struct inode *inode);
 struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs);
 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
+struct folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct page *f2fs_get_inode_page(struct f2fs_sb_info *sbi, pgoff_t ino);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index ac3fa0147e1e..ef433dce4b05 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1535,6 +1535,11 @@ static struct folio *__get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid,
 	return ERR_PTR(err);
 }
 
+struct folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid)
+{
+	return __get_node_folio(sbi, nid, NULL, 0, NODE_TYPE_REGULAR);
+}
+
 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid)
 {
 	struct folio *folio = __get_node_folio(sbi, nid, NULL, 0,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 074/153] f2fs: Use folios in f2fs_get_dnode_of_data()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (72 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 073/153] f2fs: Add f2fs_get_node_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 075/153] f2fs: Use a folio in truncate_node() Matthew Wilcox (Oracle)
                   ` (80 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Pass the folio into __get_node_folio() and f2fs_get_node_page_ra() which
becomes f2fs_get_node_folio_ra().  That function has no callers outside
node.c, so make it static.  Removes seven calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h |  1 -
 fs/f2fs/node.c | 76 +++++++++++++++++++++++++-------------------------
 2 files changed, 38 insertions(+), 39 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 62ae222824e9..0d32541993a0 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3735,7 +3735,6 @@ struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct page *f2fs_get_inode_page(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid);
 struct page *f2fs_get_xnode_page(struct f2fs_sb_info *sbi, pgoff_t xnid);
-struct page *f2fs_get_node_page_ra(struct page *parent, int start);
 int f2fs_move_node_page(struct page *node_page, int gc_type);
 void f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index ef433dce4b05..1c6eeed110c9 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -754,6 +754,8 @@ static int get_node_path(struct inode *inode, long block,
 	return level;
 }
 
+static struct folio *f2fs_get_node_folio_ra(struct folio *parent, int start);
+
 /*
  * Caller should call f2fs_put_dnode(dn).
  * Also, it should grab and release a rwsem by calling f2fs_lock_op() and
@@ -762,8 +764,8 @@ static int get_node_path(struct inode *inode, long block,
 int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
-	struct page *npage[4];
-	struct page *parent = NULL;
+	struct folio *nfolio[4];
+	struct folio *parent = NULL;
 	int offset[4];
 	unsigned int noffset[4];
 	nid_t nids[4];
@@ -775,25 +777,26 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 		return level;
 
 	nids[0] = dn->inode->i_ino;
-	npage[0] = dn->inode_page;
 
-	if (!npage[0]) {
-		npage[0] = f2fs_get_inode_page(sbi, nids[0]);
-		if (IS_ERR(npage[0]))
-			return PTR_ERR(npage[0]);
+	if (!dn->inode_page) {
+		nfolio[0] = f2fs_get_inode_folio(sbi, nids[0]);
+		if (IS_ERR(nfolio[0]))
+			return PTR_ERR(nfolio[0]);
+	} else {
+		nfolio[0] = page_folio(dn->inode_page);
 	}
 
 	/* if inline_data is set, should not report any block indices */
 	if (f2fs_has_inline_data(dn->inode) && index) {
 		err = -ENOENT;
-		f2fs_put_page(npage[0], 1);
+		f2fs_folio_put(nfolio[0], true);
 		goto release_out;
 	}
 
-	parent = npage[0];
+	parent = nfolio[0];
 	if (level != 0)
-		nids[1] = get_nid(parent, offset[0], true);
-	dn->inode_page = npage[0];
+		nids[1] = get_nid(&parent->page, offset[0], true);
+	dn->inode_page = &nfolio[0]->page;
 	dn->inode_page_locked = true;
 
 	/* get indirect or direct nodes */
@@ -808,47 +811,47 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 			}
 
 			dn->nid = nids[i];
-			npage[i] = f2fs_new_node_page(dn, noffset[i]);
-			if (IS_ERR(npage[i])) {
+			nfolio[i] = f2fs_new_node_folio(dn, noffset[i]);
+			if (IS_ERR(nfolio[i])) {
 				f2fs_alloc_nid_failed(sbi, nids[i]);
-				err = PTR_ERR(npage[i]);
+				err = PTR_ERR(nfolio[i]);
 				goto release_pages;
 			}
 
-			set_nid(parent, offset[i - 1], nids[i], i == 1);
+			set_nid(&parent->page, offset[i - 1], nids[i], i == 1);
 			f2fs_alloc_nid_done(sbi, nids[i]);
 			done = true;
 		} else if (mode == LOOKUP_NODE_RA && i == level && level > 1) {
-			npage[i] = f2fs_get_node_page_ra(parent, offset[i - 1]);
-			if (IS_ERR(npage[i])) {
-				err = PTR_ERR(npage[i]);
+			nfolio[i] = f2fs_get_node_folio_ra(parent, offset[i - 1]);
+			if (IS_ERR(nfolio[i])) {
+				err = PTR_ERR(nfolio[i]);
 				goto release_pages;
 			}
 			done = true;
 		}
 		if (i == 1) {
 			dn->inode_page_locked = false;
-			unlock_page(parent);
+			folio_unlock(parent);
 		} else {
-			f2fs_put_page(parent, 1);
+			f2fs_folio_put(parent, true);
 		}
 
 		if (!done) {
-			npage[i] = f2fs_get_node_page(sbi, nids[i]);
-			if (IS_ERR(npage[i])) {
-				err = PTR_ERR(npage[i]);
-				f2fs_put_page(npage[0], 0);
+			nfolio[i] = f2fs_get_node_folio(sbi, nids[i]);
+			if (IS_ERR(nfolio[i])) {
+				err = PTR_ERR(nfolio[i]);
+				f2fs_folio_put(nfolio[0], false);
 				goto release_out;
 			}
 		}
 		if (i < level) {
-			parent = npage[i];
-			nids[i + 1] = get_nid(parent, offset[i], false);
+			parent = nfolio[i];
+			nids[i + 1] = get_nid(&parent->page, offset[i], false);
 		}
 	}
 	dn->nid = nids[level];
 	dn->ofs_in_node = offset[level];
-	dn->node_page = npage[level];
+	dn->node_page = &nfolio[level]->page;
 	dn->data_blkaddr = f2fs_data_blkaddr(dn);
 
 	if (is_inode_flag_set(dn->inode, FI_COMPRESSED_FILE) &&
@@ -881,9 +884,9 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 	return 0;
 
 release_pages:
-	f2fs_put_page(parent, 1);
+	f2fs_folio_put(parent, true);
 	if (i > 1)
-		f2fs_put_page(npage[0], 0);
+		f2fs_folio_put(nfolio[0], false);
 release_out:
 	dn->inode_page = NULL;
 	dn->node_page = NULL;
@@ -1479,8 +1482,7 @@ static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
 }
 
 static struct folio *__get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid,
-					struct page *parent, int start,
-					enum node_type ntype)
+		struct folio *parent, int start, enum node_type ntype)
 {
 	struct folio *folio;
 	int err;
@@ -1503,7 +1505,7 @@ static struct folio *__get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid,
 	}
 
 	if (parent)
-		f2fs_ra_node_pages(parent, start + 1, MAX_RA_NODE);
+		f2fs_ra_node_pages(&parent->page, start + 1, MAX_RA_NODE);
 
 	folio_lock(folio);
 
@@ -1573,14 +1575,12 @@ struct page *f2fs_get_xnode_page(struct f2fs_sb_info *sbi, pgoff_t xnid)
 	return &folio->page;
 }
 
-struct page *f2fs_get_node_page_ra(struct page *parent, int start)
+static struct folio *f2fs_get_node_folio_ra(struct folio *parent, int start)
 {
-	struct f2fs_sb_info *sbi = F2FS_P_SB(parent);
-	nid_t nid = get_nid(parent, start, false);
-	struct folio *folio = __get_node_folio(sbi, nid, parent, start,
-							NODE_TYPE_REGULAR);
+	struct f2fs_sb_info *sbi = F2FS_F_SB(parent);
+	nid_t nid = get_nid(&parent->page, start, false);
 
-	return &folio->page;
+	return __get_node_folio(sbi, nid, parent, start, NODE_TYPE_REGULAR);
 }
 
 static void flush_inline_data(struct f2fs_sb_info *sbi, nid_t ino)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 075/153] f2fs: Use a folio in truncate_node()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (73 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 074/153] f2fs: Use folios in f2fs_get_dnode_of_data() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 076/153] f2fs: Use a folio in truncate_nodes() Matthew Wilcox (Oracle)
                   ` (79 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove two calls to compound_head()

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 1c6eeed110c9..8a94bae2ab78 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -948,35 +948,35 @@ static int truncate_node(struct dnode_of_data *dn)
 static int truncate_dnode(struct dnode_of_data *dn)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
-	struct page *page;
+	struct folio *folio;
 	int err;
 
 	if (dn->nid == 0)
 		return 1;
 
 	/* get direct node */
-	page = f2fs_get_node_page(sbi, dn->nid);
-	if (PTR_ERR(page) == -ENOENT)
+	folio = f2fs_get_node_folio(sbi, dn->nid);
+	if (PTR_ERR(folio) == -ENOENT)
 		return 1;
-	else if (IS_ERR(page))
-		return PTR_ERR(page);
+	else if (IS_ERR(folio))
+		return PTR_ERR(folio);
 
-	if (IS_INODE(page) || ino_of_node(page) != dn->inode->i_ino) {
+	if (IS_INODE(&folio->page) || ino_of_node(&folio->page) != dn->inode->i_ino) {
 		f2fs_err(sbi, "incorrect node reference, ino: %lu, nid: %u, ino_of_node: %u",
-				dn->inode->i_ino, dn->nid, ino_of_node(page));
+				dn->inode->i_ino, dn->nid, ino_of_node(&folio->page));
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_handle_error(sbi, ERROR_INVALID_NODE_REFERENCE);
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 		return -EFSCORRUPTED;
 	}
 
 	/* Make dnode_of_data for parameter */
-	dn->node_page = page;
+	dn->node_page = &folio->page;
 	dn->ofs_in_node = 0;
 	f2fs_truncate_data_blocks_range(dn, ADDRS_PER_BLOCK(dn->inode));
 	err = truncate_node(dn);
 	if (err) {
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 		return err;
 	}
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 076/153] f2fs: Use a folio in truncate_nodes()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (74 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 075/153] f2fs: Use a folio in truncate_node() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 077/153] f2fs: Use folios in truncate_partial_nodes() Matthew Wilcox (Oracle)
                   ` (78 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove two calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 8a94bae2ab78..241b374e8dc8 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -987,7 +987,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 						int ofs, int depth)
 {
 	struct dnode_of_data rdn = *dn;
-	struct page *page;
+	struct folio *folio;
 	struct f2fs_node *rn;
 	nid_t child_nid;
 	unsigned int child_nofs;
@@ -999,15 +999,15 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 
 	trace_f2fs_truncate_nodes_enter(dn->inode, dn->nid, dn->data_blkaddr);
 
-	page = f2fs_get_node_page(F2FS_I_SB(dn->inode), dn->nid);
-	if (IS_ERR(page)) {
-		trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(page));
-		return PTR_ERR(page);
+	folio = f2fs_get_node_folio(F2FS_I_SB(dn->inode), dn->nid);
+	if (IS_ERR(folio)) {
+		trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(folio));
+		return PTR_ERR(folio);
 	}
 
-	f2fs_ra_node_pages(page, ofs, NIDS_PER_BLOCK);
+	f2fs_ra_node_pages(&folio->page, ofs, NIDS_PER_BLOCK);
 
-	rn = F2FS_NODE(page);
+	rn = F2FS_NODE(&folio->page);
 	if (depth < 3) {
 		for (i = ofs; i < NIDS_PER_BLOCK; i++, freed++) {
 			child_nid = le32_to_cpu(rn->in.nid[i]);
@@ -1017,7 +1017,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 			ret = truncate_dnode(&rdn);
 			if (ret < 0)
 				goto out_err;
-			if (set_nid(page, i, 0, false))
+			if (set_nid(&folio->page, i, 0, false))
 				dn->node_changed = true;
 		}
 	} else {
@@ -1031,7 +1031,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 			rdn.nid = child_nid;
 			ret = truncate_nodes(&rdn, child_nofs, 0, depth - 1);
 			if (ret == (NIDS_PER_BLOCK + 1)) {
-				if (set_nid(page, i, 0, false))
+				if (set_nid(&folio->page, i, 0, false))
 					dn->node_changed = true;
 				child_nofs += ret;
 			} else if (ret < 0 && ret != -ENOENT) {
@@ -1043,19 +1043,19 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 
 	if (!ofs) {
 		/* remove current indirect node */
-		dn->node_page = page;
+		dn->node_page = &folio->page;
 		ret = truncate_node(dn);
 		if (ret)
 			goto out_err;
 		freed++;
 	} else {
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 	}
 	trace_f2fs_truncate_nodes_exit(dn->inode, freed);
 	return freed;
 
 out_err:
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 	trace_f2fs_truncate_nodes_exit(dn->inode, ret);
 	return ret;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 077/153] f2fs: Use folios in truncate_partial_nodes()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (75 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 076/153] f2fs: Use a folio in truncate_nodes() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 078/153] f2fs: Pass a folio to f2fs_ra_node_pages() Matthew Wilcox (Oracle)
                   ` (77 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Removes two calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 241b374e8dc8..e29828c2f7b5 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1063,7 +1063,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 static int truncate_partial_nodes(struct dnode_of_data *dn,
 			struct f2fs_inode *ri, int *offset, int depth)
 {
-	struct page *pages[2];
+	struct folio *folios[2];
 	nid_t nid[3];
 	nid_t child_nid;
 	int err = 0;
@@ -1077,45 +1077,45 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
 	/* get indirect nodes in the path */
 	for (i = 0; i < idx + 1; i++) {
 		/* reference count'll be increased */
-		pages[i] = f2fs_get_node_page(F2FS_I_SB(dn->inode), nid[i]);
-		if (IS_ERR(pages[i])) {
-			err = PTR_ERR(pages[i]);
+		folios[i] = f2fs_get_node_folio(F2FS_I_SB(dn->inode), nid[i]);
+		if (IS_ERR(folios[i])) {
+			err = PTR_ERR(folios[i]);
 			idx = i - 1;
 			goto fail;
 		}
-		nid[i + 1] = get_nid(pages[i], offset[i + 1], false);
+		nid[i + 1] = get_nid(&folios[i]->page, offset[i + 1], false);
 	}
 
-	f2fs_ra_node_pages(pages[idx], offset[idx + 1], NIDS_PER_BLOCK);
+	f2fs_ra_node_pages(&folios[idx]->page, offset[idx + 1], NIDS_PER_BLOCK);
 
 	/* free direct nodes linked to a partial indirect node */
 	for (i = offset[idx + 1]; i < NIDS_PER_BLOCK; i++) {
-		child_nid = get_nid(pages[idx], i, false);
+		child_nid = get_nid(&folios[idx]->page, i, false);
 		if (!child_nid)
 			continue;
 		dn->nid = child_nid;
 		err = truncate_dnode(dn);
 		if (err < 0)
 			goto fail;
-		if (set_nid(pages[idx], i, 0, false))
+		if (set_nid(&folios[idx]->page, i, 0, false))
 			dn->node_changed = true;
 	}
 
 	if (offset[idx + 1] == 0) {
-		dn->node_page = pages[idx];
+		dn->node_page = &folios[idx]->page;
 		dn->nid = nid[idx];
 		err = truncate_node(dn);
 		if (err)
 			goto fail;
 	} else {
-		f2fs_put_page(pages[idx], 1);
+		f2fs_folio_put(folios[idx], true);
 	}
 	offset[idx]++;
 	offset[idx + 1] = 0;
 	idx--;
 fail:
 	for (i = idx; i >= 0; i--)
-		f2fs_put_page(pages[i], 1);
+		f2fs_folio_put(folios[i], true);
 
 	trace_f2fs_truncate_partial_nodes(dn->inode, nid, depth, err);
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 078/153] f2fs: Pass a folio to f2fs_ra_node_pages()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (76 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 077/153] f2fs: Use folios in truncate_partial_nodes() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 079/153] f2fs: Use a folio in gc_node_segment() Matthew Wilcox (Oracle)
                   ` (76 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Removes a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index e29828c2f7b5..5df3065c18ea 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -623,9 +623,9 @@ int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
 /*
  * readahead MAX_RA_NODE number of node pages.
  */
-static void f2fs_ra_node_pages(struct page *parent, int start, int n)
+static void f2fs_ra_node_pages(struct folio *parent, int start, int n)
 {
-	struct f2fs_sb_info *sbi = F2FS_P_SB(parent);
+	struct f2fs_sb_info *sbi = F2FS_F_SB(parent);
 	struct blk_plug plug;
 	int i, end;
 	nid_t nid;
@@ -636,7 +636,7 @@ static void f2fs_ra_node_pages(struct page *parent, int start, int n)
 	end = start + n;
 	end = min(end, (int)NIDS_PER_BLOCK);
 	for (i = start; i < end; i++) {
-		nid = get_nid(parent, i, false);
+		nid = get_nid(&parent->page, i, false);
 		f2fs_ra_node_page(sbi, nid);
 	}
 
@@ -1005,7 +1005,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 		return PTR_ERR(folio);
 	}
 
-	f2fs_ra_node_pages(&folio->page, ofs, NIDS_PER_BLOCK);
+	f2fs_ra_node_pages(folio, ofs, NIDS_PER_BLOCK);
 
 	rn = F2FS_NODE(&folio->page);
 	if (depth < 3) {
@@ -1086,7 +1086,7 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
 		nid[i + 1] = get_nid(&folios[i]->page, offset[i + 1], false);
 	}
 
-	f2fs_ra_node_pages(&folios[idx]->page, offset[idx + 1], NIDS_PER_BLOCK);
+	f2fs_ra_node_pages(folios[idx], offset[idx + 1], NIDS_PER_BLOCK);
 
 	/* free direct nodes linked to a partial indirect node */
 	for (i = offset[idx + 1]; i < NIDS_PER_BLOCK; i++) {
@@ -1505,7 +1505,7 @@ static struct folio *__get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid,
 	}
 
 	if (parent)
-		f2fs_ra_node_pages(&parent->page, start + 1, MAX_RA_NODE);
+		f2fs_ra_node_pages(parent, start + 1, MAX_RA_NODE);
 
 	folio_lock(folio);
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 079/153] f2fs: Use a folio in gc_node_segment()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (77 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 078/153] f2fs: Pass a folio to f2fs_ra_node_pages() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 080/153] f2fs: Convert f2fs_move_node_page() to f2fs_move_node_folio() Matthew Wilcox (Oracle)
                   ` (75 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove three calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/gc.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 45b1ffa5ea93..56c0ca609fc1 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1045,7 +1045,7 @@ static int gc_node_segment(struct f2fs_sb_info *sbi,
 
 	for (off = 0; off < usable_blks_in_seg; off++, entry++) {
 		nid_t nid = le32_to_cpu(entry->nid);
-		struct page *node_page;
+		struct folio *node_folio;
 		struct node_info ni;
 		int err;
 
@@ -1068,27 +1068,27 @@ static int gc_node_segment(struct f2fs_sb_info *sbi,
 		}
 
 		/* phase == 2 */
-		node_page = f2fs_get_node_page(sbi, nid);
-		if (IS_ERR(node_page))
+		node_folio = f2fs_get_node_folio(sbi, nid);
+		if (IS_ERR(node_folio))
 			continue;
 
-		/* block may become invalid during f2fs_get_node_page */
+		/* block may become invalid during f2fs_get_node_folio */
 		if (check_valid_map(sbi, segno, off) == 0) {
-			f2fs_put_page(node_page, 1);
+			f2fs_folio_put(node_folio, true);
 			continue;
 		}
 
 		if (f2fs_get_node_info(sbi, nid, &ni, false)) {
-			f2fs_put_page(node_page, 1);
+			f2fs_folio_put(node_folio, true);
 			continue;
 		}
 
 		if (ni.blk_addr != start_addr + off) {
-			f2fs_put_page(node_page, 1);
+			f2fs_folio_put(node_folio, true);
 			continue;
 		}
 
-		err = f2fs_move_node_page(node_page, gc_type);
+		err = f2fs_move_node_page(&node_folio->page, gc_type);
 		if (!err && gc_type == FG_GC)
 			submitted++;
 		stat_inc_node_blk_count(sbi, 1, gc_type);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 080/153] f2fs: Convert f2fs_move_node_page() to f2fs_move_node_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (78 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 079/153] f2fs: Use a folio in gc_node_segment() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 081/153] f2fs: Convert __write_node_page() to __write_node_folio() Matthew Wilcox (Oracle)
                   ` (74 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Pass the folio in from the one caller and use it throughout.
Removes eight hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h |  2 +-
 fs/f2fs/gc.c   |  2 +-
 fs/f2fs/node.c | 20 ++++++++++----------
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 0d32541993a0..92b5878dc5d3 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3735,7 +3735,7 @@ struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct page *f2fs_get_inode_page(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid);
 struct page *f2fs_get_xnode_page(struct f2fs_sb_info *sbi, pgoff_t xnid);
-int f2fs_move_node_page(struct page *node_page, int gc_type);
+int f2fs_move_node_folio(struct folio *node_folio, int gc_type);
 void f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 			struct writeback_control *wbc, bool atomic,
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 56c0ca609fc1..5c58e6a306f4 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1088,7 +1088,7 @@ static int gc_node_segment(struct f2fs_sb_info *sbi,
 			continue;
 		}
 
-		err = f2fs_move_node_page(&node_folio->page, gc_type);
+		err = f2fs_move_node_folio(node_folio, gc_type);
 		if (!err && gc_type == FG_GC)
 			submitted++;
 		stat_inc_node_blk_count(sbi, 1, gc_type);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 5df3065c18ea..20d62994cf46 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1789,7 +1789,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
 	return AOP_WRITEPAGE_ACTIVATE;
 }
 
-int f2fs_move_node_page(struct page *node_page, int gc_type)
+int f2fs_move_node_folio(struct folio *node_folio, int gc_type)
 {
 	int err = 0;
 
@@ -1800,30 +1800,30 @@ int f2fs_move_node_page(struct page *node_page, int gc_type)
 			.for_reclaim = 0,
 		};
 
-		f2fs_wait_on_page_writeback(node_page, NODE, true, true);
+		f2fs_folio_wait_writeback(node_folio, NODE, true, true);
 
-		set_page_dirty(node_page);
+		folio_mark_dirty(node_folio);
 
-		if (!clear_page_dirty_for_io(node_page)) {
+		if (!folio_clear_dirty_for_io(node_folio)) {
 			err = -EAGAIN;
 			goto out_page;
 		}
 
-		if (__write_node_page(node_page, false, NULL,
+		if (__write_node_page(&node_folio->page, false, NULL,
 					&wbc, false, FS_GC_NODE_IO, NULL)) {
 			err = -EAGAIN;
-			unlock_page(node_page);
+			folio_unlock(node_folio);
 		}
 		goto release_page;
 	} else {
 		/* set page dirty and write it */
-		if (!folio_test_writeback(page_folio(node_page)))
-			set_page_dirty(node_page);
+		if (!folio_test_writeback(node_folio))
+			folio_mark_dirty(node_folio);
 	}
 out_page:
-	unlock_page(node_page);
+	folio_unlock(node_folio);
 release_page:
-	f2fs_put_page(node_page, 0);
+	f2fs_folio_put(node_folio, false);
 	return err;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 081/153] f2fs: Convert __write_node_page() to __write_node_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (79 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 080/153] f2fs: Convert f2fs_move_node_page() to f2fs_move_node_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 082/153] f2fs: Use a folio in is_alive() Matthew Wilcox (Oracle)
                   ` (73 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All three callers now have a folio so pass it in.  Removes
two calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 20d62994cf46..f3fbf0d14341 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1676,21 +1676,20 @@ static struct folio *last_fsync_dnode(struct f2fs_sb_info *sbi, nid_t ino)
 	return last_folio;
 }
 
-static int __write_node_page(struct page *page, bool atomic, bool *submitted,
+static int __write_node_folio(struct folio *folio, bool atomic, bool *submitted,
 				struct writeback_control *wbc, bool do_balance,
 				enum iostat_type io_type, unsigned int *seq_id)
 {
-	struct f2fs_sb_info *sbi = F2FS_P_SB(page);
-	struct folio *folio = page_folio(page);
+	struct f2fs_sb_info *sbi = F2FS_F_SB(folio);
 	nid_t nid;
 	struct node_info ni;
 	struct f2fs_io_info fio = {
 		.sbi = sbi,
-		.ino = ino_of_node(page),
+		.ino = ino_of_node(&folio->page),
 		.type = NODE,
 		.op = REQ_OP_WRITE,
 		.op_flags = wbc_to_write_flags(wbc),
-		.page = page,
+		.page = &folio->page,
 		.encrypted_page = NULL,
 		.submitted = 0,
 		.io_type = io_type,
@@ -1715,11 +1714,11 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
 
 	if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) &&
 			wbc->sync_mode == WB_SYNC_NONE &&
-			IS_DNODE(page) && is_cold_node(page))
+			IS_DNODE(&folio->page) && is_cold_node(&folio->page))
 		goto redirty_out;
 
 	/* get old block addr of this node page */
-	nid = nid_of_node(page);
+	nid = nid_of_node(&folio->page);
 	f2fs_bug_on(sbi, folio->index != nid);
 
 	if (f2fs_get_node_info(sbi, nid, &ni, !do_balance))
@@ -1753,7 +1752,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
 
 	/* should add to global list before clearing PAGECACHE status */
 	if (f2fs_in_warm_node_list(sbi, folio)) {
-		seq = f2fs_add_fsync_node_entry(sbi, page);
+		seq = f2fs_add_fsync_node_entry(sbi, &folio->page);
 		if (seq_id)
 			*seq_id = seq;
 	}
@@ -1762,12 +1761,12 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
 
 	fio.old_blkaddr = ni.blk_addr;
 	f2fs_do_write_node_page(nid, &fio);
-	set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(page));
+	set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(&folio->page));
 	dec_page_count(sbi, F2FS_DIRTY_NODES);
 	f2fs_up_read(&sbi->node_write);
 
 	if (wbc->for_reclaim) {
-		f2fs_submit_merged_write_cond(sbi, NULL, page, 0, NODE);
+		f2fs_submit_merged_write_cond(sbi, NULL, &folio->page, 0, NODE);
 		submitted = NULL;
 	}
 
@@ -1809,7 +1808,7 @@ int f2fs_move_node_folio(struct folio *node_folio, int gc_type)
 			goto out_page;
 		}
 
-		if (__write_node_page(&node_folio->page, false, NULL,
+		if (__write_node_folio(node_folio, false, NULL,
 					&wbc, false, FS_GC_NODE_IO, NULL)) {
 			err = -EAGAIN;
 			folio_unlock(node_folio);
@@ -1908,7 +1907,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 			if (!folio_clear_dirty_for_io(folio))
 				goto continue_unlock;
 
-			ret = __write_node_page(&folio->page, atomic &&
+			ret = __write_node_folio(folio, atomic &&
 						folio == last_folio,
 						&submitted, wbc, true,
 						FS_NODE_IO, seq_id);
@@ -2116,7 +2115,7 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 			set_fsync_mark(&folio->page, 0);
 			set_dentry_mark(&folio->page, 0);
 
-			ret = __write_node_page(&folio->page, false, &submitted,
+			ret = __write_node_folio(folio, false, &submitted,
 						wbc, do_balance, io_type, NULL);
 			if (ret)
 				folio_unlock(folio);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 082/153] f2fs: Use a folio in is_alive()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (80 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 081/153] f2fs: Convert __write_node_page() to __write_node_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 083/153] f2fs: Use a folio in check_index_in_prev_nodes() Matthew Wilcox (Oracle)
                   ` (72 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove four calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/gc.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 5c58e6a306f4..b18fecd2c352 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1134,7 +1134,7 @@ block_t f2fs_start_bidx_of_node(unsigned int node_ofs, struct inode *inode)
 static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 		struct node_info *dni, block_t blkaddr, unsigned int *nofs)
 {
-	struct page *node_page;
+	struct folio *node_folio;
 	nid_t nid;
 	unsigned int ofs_in_node, max_addrs, base;
 	block_t source_blkaddr;
@@ -1142,12 +1142,12 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	nid = le32_to_cpu(sum->nid);
 	ofs_in_node = le16_to_cpu(sum->ofs_in_node);
 
-	node_page = f2fs_get_node_page(sbi, nid);
-	if (IS_ERR(node_page))
+	node_folio = f2fs_get_node_folio(sbi, nid);
+	if (IS_ERR(node_folio))
 		return false;
 
 	if (f2fs_get_node_info(sbi, nid, dni, false)) {
-		f2fs_put_page(node_page, 1);
+		f2fs_folio_put(node_folio, true);
 		return false;
 	}
 
@@ -1158,12 +1158,12 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	}
 
 	if (f2fs_check_nid_range(sbi, dni->ino)) {
-		f2fs_put_page(node_page, 1);
+		f2fs_folio_put(node_folio, true);
 		return false;
 	}
 
-	if (IS_INODE(node_page)) {
-		base = offset_in_addr(F2FS_INODE(node_page));
+	if (IS_INODE(&node_folio->page)) {
+		base = offset_in_addr(F2FS_INODE(&node_folio->page));
 		max_addrs = DEF_ADDRS_PER_INODE;
 	} else {
 		base = 0;
@@ -1173,13 +1173,13 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	if (base + ofs_in_node >= max_addrs) {
 		f2fs_err(sbi, "Inconsistent blkaddr offset: base:%u, ofs_in_node:%u, max:%u, ino:%u, nid:%u",
 			base, ofs_in_node, max_addrs, dni->ino, dni->nid);
-		f2fs_put_page(node_page, 1);
+		f2fs_folio_put(node_folio, true);
 		return false;
 	}
 
-	*nofs = ofs_of_node(node_page);
-	source_blkaddr = data_blkaddr(NULL, node_page, ofs_in_node);
-	f2fs_put_page(node_page, 1);
+	*nofs = ofs_of_node(&node_folio->page);
+	source_blkaddr = data_blkaddr(NULL, &node_folio->page, ofs_in_node);
+	f2fs_folio_put(node_folio, true);
 
 	if (source_blkaddr != blkaddr) {
 #ifdef CONFIG_F2FS_CHECK_FS
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 083/153] f2fs: Use a folio in check_index_in_prev_nodes()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (81 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 082/153] f2fs: Use a folio in is_alive() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 084/153] f2fs: Remove f2fs_get_node_page() Matthew Wilcox (Oracle)
                   ` (71 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a hidden call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/recovery.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 4b2c09d63bbf..dd69ff5b7661 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -494,8 +494,7 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 	unsigned short blkoff = GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
 	struct f2fs_summary_block *sum_node;
 	struct f2fs_summary sum;
-	struct folio *sum_folio;
-	struct page *node_page;
+	struct folio *sum_folio, *node_folio;
 	struct dnode_of_data tdn = *dn;
 	nid_t ino, nid;
 	struct inode *inode;
@@ -549,13 +548,13 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 	}
 
 	/* Get the node page */
-	node_page = f2fs_get_node_page(sbi, nid);
-	if (IS_ERR(node_page))
-		return PTR_ERR(node_page);
+	node_folio = f2fs_get_node_folio(sbi, nid);
+	if (IS_ERR(node_folio))
+		return PTR_ERR(node_folio);
 
-	offset = ofs_of_node(node_page);
-	ino = ino_of_node(node_page);
-	f2fs_put_page(node_page, 1);
+	offset = ofs_of_node(&node_folio->page);
+	ino = ino_of_node(&node_folio->page);
+	f2fs_folio_put(node_folio, true);
 
 	if (ino != dn->inode->i_ino) {
 		int ret;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 084/153] f2fs: Remove f2fs_get_node_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (82 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 083/153] f2fs: Use a folio in check_index_in_prev_nodes() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 085/153] f2fs: Use a folio in prepare_write_begin Matthew Wilcox (Oracle)
                   ` (70 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have now been converted to call f2fs_get_node_folio().
Remove this wrapper.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 1 -
 fs/f2fs/node.c | 8 --------
 2 files changed, 9 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 92b5878dc5d3..9fd4640f67bf 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3730,7 +3730,6 @@ struct page *f2fs_new_inode_page(struct inode *inode);
 struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs);
 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
 struct folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid);
-struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct page *f2fs_get_inode_page(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index f3fbf0d14341..5fb4f9c3c20f 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1542,14 +1542,6 @@ struct folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid)
 	return __get_node_folio(sbi, nid, NULL, 0, NODE_TYPE_REGULAR);
 }
 
-struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid)
-{
-	struct folio *folio = __get_node_folio(sbi, nid, NULL, 0,
-						NODE_TYPE_REGULAR);
-
-	return &folio->page;
-}
-
 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino)
 {
 	return __get_node_folio(sbi, ino, NULL, 0, NODE_TYPE_INODE);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 085/153] f2fs: Use a folio in prepare_write_begin
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (83 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 084/153] f2fs: Remove f2fs_get_node_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 086/153] f2fs: Use a folio in __find_data_block() Matthew Wilcox (Oracle)
                   ` (69 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to f2fs_get_inode_page().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index af0106e4f184..5904a40fbf51 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -3354,7 +3354,7 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
 	struct inode *inode = folio->mapping->host;
 	pgoff_t index = folio->index;
 	struct dnode_of_data dn;
-	struct page *ipage;
+	struct folio *ifolio;
 	bool locked = false;
 	int flag = F2FS_GET_BLOCK_PRE_AIO;
 	int err = 0;
@@ -3379,20 +3379,20 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
 
 restart:
 	/* check inline_data */
-	ipage = f2fs_get_inode_page(sbi, inode->i_ino);
-	if (IS_ERR(ipage)) {
-		err = PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
+	if (IS_ERR(ifolio)) {
+		err = PTR_ERR(ifolio);
 		goto unlock_out;
 	}
 
-	set_new_dnode(&dn, inode, ipage, ipage, 0);
+	set_new_dnode(&dn, inode, &ifolio->page, &ifolio->page, 0);
 
 	if (f2fs_has_inline_data(inode)) {
 		if (pos + len <= MAX_INLINE_DATA(inode)) {
-			f2fs_do_read_inline_data(folio, ipage);
+			f2fs_do_read_inline_data(folio, &ifolio->page);
 			set_inode_flag(inode, FI_DATA_EXIST);
 			if (inode->i_nlink)
-				set_page_private_inline(ipage);
+				set_page_private_inline(&ifolio->page);
 			goto out;
 		}
 		err = f2fs_convert_inline_page(&dn, folio_page(folio, 0));
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 086/153] f2fs: Use a folio in __find_data_block()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (84 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 085/153] f2fs: Use a folio in prepare_write_begin Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 087/153] f2fs: Use a folio in f2fs_init_inode_metadata() Matthew Wilcox (Oracle)
                   ` (68 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to f2fs_get_inode_page().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 5904a40fbf51..733802a53444 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -3439,14 +3439,14 @@ static int __find_data_block(struct inode *inode, pgoff_t index,
 				block_t *blk_addr)
 {
 	struct dnode_of_data dn;
-	struct page *ipage;
+	struct folio *ifolio;
 	int err = 0;
 
-	ipage = f2fs_get_inode_page(F2FS_I_SB(inode), inode->i_ino);
-	if (IS_ERR(ipage))
-		return PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino);
+	if (IS_ERR(ifolio))
+		return PTR_ERR(ifolio);
 
-	set_new_dnode(&dn, inode, ipage, ipage, 0);
+	set_new_dnode(&dn, inode, &ifolio->page, &ifolio->page, 0);
 
 	if (!f2fs_lookup_read_extent_cache_block(inode, index,
 						 &dn.data_blkaddr)) {
@@ -3467,17 +3467,17 @@ static int __reserve_data_block(struct inode *inode, pgoff_t index,
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct dnode_of_data dn;
-	struct page *ipage;
+	struct folio *ifolio;
 	int err = 0;
 
 	f2fs_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO);
 
-	ipage = f2fs_get_inode_page(sbi, inode->i_ino);
-	if (IS_ERR(ipage)) {
-		err = PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
+	if (IS_ERR(ifolio)) {
+		err = PTR_ERR(ifolio);
 		goto unlock_out;
 	}
-	set_new_dnode(&dn, inode, ipage, ipage, 0);
+	set_new_dnode(&dn, inode, &ifolio->page, &ifolio->page, 0);
 
 	if (!f2fs_lookup_read_extent_cache_block(dn.inode, index,
 						&dn.data_blkaddr))
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 087/153] f2fs: Use a folio in f2fs_init_inode_metadata()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (85 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 086/153] f2fs: Use a folio in __find_data_block() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 088/153] f2fs: Pass a folio to make_empty_dir() Matthew Wilcox (Oracle)
                   ` (67 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Since this is the only caller of f2fs_new_inode_page(), convert that
to return a folio at the same time.  Removes four calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c  | 37 +++++++++++++++++++------------------
 fs/f2fs/f2fs.h |  2 +-
 fs/f2fs/node.c |  8 ++++----
 3 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 2cc4ad636290..aa8aafb6e332 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -517,46 +517,47 @@ static int make_empty_dir(struct inode *inode,
 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 			const struct f2fs_filename *fname, struct page *dpage)
 {
-	struct page *page;
+	struct folio *folio;
 	int err;
 
 	if (is_inode_flag_set(inode, FI_NEW_INODE)) {
-		page = f2fs_new_inode_page(inode);
-		if (IS_ERR(page))
-			return page;
+		folio = f2fs_new_inode_folio(inode);
+		if (IS_ERR(folio))
+			return &folio->page;
 
 		if (S_ISDIR(inode->i_mode)) {
 			/* in order to handle error case */
-			get_page(page);
-			err = make_empty_dir(inode, dir, page);
+			folio_get(folio);
+			err = make_empty_dir(inode, dir, &folio->page);
 			if (err) {
-				lock_page(page);
+				folio_lock(folio);
 				goto put_error;
 			}
-			put_page(page);
+			folio_put(folio);
 		}
 
-		err = f2fs_init_acl(inode, dir, page, dpage);
+		err = f2fs_init_acl(inode, dir, &folio->page, dpage);
 		if (err)
 			goto put_error;
 
 		err = f2fs_init_security(inode, dir,
-					 fname ? fname->usr_fname : NULL, page);
+					 fname ? fname->usr_fname : NULL,
+					 &folio->page);
 		if (err)
 			goto put_error;
 
 		if (IS_ENCRYPTED(inode)) {
-			err = fscrypt_set_context(inode, page);
+			err = fscrypt_set_context(inode, folio);
 			if (err)
 				goto put_error;
 		}
 	} else {
-		page = f2fs_get_inode_page(F2FS_I_SB(dir), inode->i_ino);
-		if (IS_ERR(page))
-			return page;
+		folio = f2fs_get_inode_folio(F2FS_I_SB(dir), inode->i_ino);
+		if (IS_ERR(folio))
+			return &folio->page;
 	}
 
-	init_dent_inode(dir, inode, fname, page);
+	init_dent_inode(dir, inode, fname, &folio->page);
 
 	/*
 	 * This file should be checkpointed during fsync.
@@ -573,12 +574,12 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 			f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
 		f2fs_i_links_write(inode, true);
 	}
-	return page;
+	return &folio->page;
 
 put_error:
 	clear_nlink(inode);
-	f2fs_update_inode(inode, page);
-	f2fs_put_page(page, 1);
+	f2fs_update_inode(inode, &folio->page);
+	f2fs_folio_put(folio, true);
 	return ERR_PTR(err);
 }
 
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 9fd4640f67bf..192e49208a56 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3726,7 +3726,7 @@ int f2fs_truncate_xattr_node(struct inode *inode);
 int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi,
 					unsigned int seq_id);
 int f2fs_remove_inode_page(struct inode *inode);
-struct page *f2fs_new_inode_page(struct inode *inode);
+struct folio *f2fs_new_inode_folio(struct inode *inode);
 struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs);
 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
 struct folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 5fb4f9c3c20f..cc4c3ba98140 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1312,15 +1312,15 @@ int f2fs_remove_inode_page(struct inode *inode)
 	return 0;
 }
 
-struct page *f2fs_new_inode_page(struct inode *inode)
+struct folio *f2fs_new_inode_folio(struct inode *inode)
 {
 	struct dnode_of_data dn;
 
 	/* allocate inode page for new inode */
 	set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino);
 
-	/* caller should f2fs_put_page(page, 1); */
-	return f2fs_new_node_page(&dn, 0);
+	/* caller should f2fs_folio_put(folio, true); */
+	return f2fs_new_node_folio(&dn, 0);
 }
 
 struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs)
@@ -2369,7 +2369,7 @@ static bool add_free_nid(struct f2fs_sb_info *sbi,
 		 *                          - __lookup_nat_cache
 		 *  - f2fs_add_link
 		 *   - f2fs_init_inode_metadata
-		 *    - f2fs_new_inode_page
+		 *    - f2fs_new_inode_folio
 		 *     - f2fs_new_node_page
 		 *      - set_node_addr
 		 *  - f2fs_alloc_nid_done
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 088/153] f2fs: Pass a folio to make_empty_dir()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (86 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 087/153] f2fs: Use a folio in f2fs_init_inode_metadata() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 089/153] f2fs: Use a folio in f2fs_try_convert_inline_dir() Matthew Wilcox (Oracle)
                   ` (66 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Pass the folio into make_empty_dir() and then into
f2fs_get_new_data_folio().  Removes a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 18 +++++++++---------
 fs/f2fs/dir.c  |  8 ++++----
 fs/f2fs/f2fs.h |  2 +-
 3 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 733802a53444..3776c1f2ad42 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1339,11 +1339,11 @@ struct folio *f2fs_get_lock_data_folio(struct inode *inode, pgoff_t index,
  *
  * Also, caller should grab and release a rwsem by calling f2fs_lock_op() and
  * f2fs_unlock_op().
- * Note that, ipage is set only by make_empty_dir, and if any error occur,
- * ipage should be released by this function.
+ * Note that, ifolio is set only by make_empty_dir, and if any error occur,
+ * ifolio should be released by this function.
  */
 struct folio *f2fs_get_new_data_folio(struct inode *inode,
-		struct page *ipage, pgoff_t index, bool new_i_size)
+		struct folio *ifolio, pgoff_t index, bool new_i_size)
 {
 	struct address_space *mapping = inode->i_mapping;
 	struct folio *folio;
@@ -1353,20 +1353,20 @@ struct folio *f2fs_get_new_data_folio(struct inode *inode,
 	folio = f2fs_grab_cache_folio(mapping, index, true);
 	if (IS_ERR(folio)) {
 		/*
-		 * before exiting, we should make sure ipage will be released
+		 * before exiting, we should make sure ifolio will be released
 		 * if any error occur.
 		 */
-		f2fs_put_page(ipage, 1);
+		f2fs_folio_put(ifolio, true);
 		return ERR_PTR(-ENOMEM);
 	}
 
-	set_new_dnode(&dn, inode, ipage, NULL, 0);
+	set_new_dnode(&dn, inode, &ifolio->page, NULL, 0);
 	err = f2fs_reserve_block(&dn, index);
 	if (err) {
 		f2fs_folio_put(folio, true);
 		return ERR_PTR(err);
 	}
-	if (!ipage)
+	if (!ifolio)
 		f2fs_put_dnode(&dn);
 
 	if (folio_test_uptodate(folio))
@@ -1379,8 +1379,8 @@ struct folio *f2fs_get_new_data_folio(struct inode *inode,
 	} else {
 		f2fs_folio_put(folio, true);
 
-		/* if ipage exists, blkaddr should be NEW_ADDR */
-		f2fs_bug_on(F2FS_I_SB(inode), ipage);
+		/* if ifolio exists, blkaddr should be NEW_ADDR */
+		f2fs_bug_on(F2FS_I_SB(inode), ifolio);
 		folio = f2fs_get_lock_data_folio(inode, index, true);
 		if (IS_ERR(folio))
 			return folio;
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index aa8aafb6e332..25969d0ae76e 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -491,16 +491,16 @@ void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
 }
 
 static int make_empty_dir(struct inode *inode,
-		struct inode *parent, struct page *page)
+		struct inode *parent, struct folio *folio)
 {
 	struct folio *dentry_folio;
 	struct f2fs_dentry_block *dentry_blk;
 	struct f2fs_dentry_ptr d;
 
 	if (f2fs_has_inline_dentry(inode))
-		return f2fs_make_empty_inline_dir(inode, parent, page);
+		return f2fs_make_empty_inline_dir(inode, parent, &folio->page);
 
-	dentry_folio = f2fs_get_new_data_folio(inode, page, 0, true);
+	dentry_folio = f2fs_get_new_data_folio(inode, folio, 0, true);
 	if (IS_ERR(dentry_folio))
 		return PTR_ERR(dentry_folio);
 
@@ -528,7 +528,7 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 		if (S_ISDIR(inode->i_mode)) {
 			/* in order to handle error case */
 			folio_get(folio);
-			err = make_empty_dir(inode, dir, &folio->page);
+			err = make_empty_dir(inode, dir, folio);
 			if (err) {
 				folio_lock(folio);
 				goto put_error;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 192e49208a56..75194caaf317 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3955,7 +3955,7 @@ struct folio *f2fs_find_data_folio(struct inode *inode, pgoff_t index,
 struct folio *f2fs_get_lock_data_folio(struct inode *inode, pgoff_t index,
 			bool for_write);
 struct folio *f2fs_get_new_data_folio(struct inode *inode,
-			struct page *ipage, pgoff_t index, bool new_i_size);
+			struct folio *ifolio, pgoff_t index, bool new_i_size);
 int f2fs_do_write_data_page(struct f2fs_io_info *fio);
 int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map, int flag);
 int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 089/153] f2fs: Use a folio in f2fs_try_convert_inline_dir()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (87 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 088/153] f2fs: Pass a folio to make_empty_dir() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 090/153] f2fs: Use a folio in f2fs_add_inline_entry() Matthew Wilcox (Oracle)
                   ` (65 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove two hidden calls to compound_head()

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 9bac2c4e8937..4684ecc0cb5a 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -595,7 +595,7 @@ static int do_convert_inline_dir(struct inode *dir, struct page *ipage,
 int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
-	struct page *ipage;
+	struct folio *ifolio;
 	struct f2fs_filename fname;
 	void *inline_dentry = NULL;
 	int err = 0;
@@ -609,22 +609,22 @@ int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
 	if (err)
 		goto out;
 
-	ipage = f2fs_get_inode_page(sbi, dir->i_ino);
-	if (IS_ERR(ipage)) {
-		err = PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(sbi, dir->i_ino);
+	if (IS_ERR(ifolio)) {
+		err = PTR_ERR(ifolio);
 		goto out_fname;
 	}
 
-	if (f2fs_has_enough_room(dir, ipage, &fname)) {
-		f2fs_put_page(ipage, 1);
+	if (f2fs_has_enough_room(dir, &ifolio->page, &fname)) {
+		f2fs_folio_put(ifolio, true);
 		goto out_fname;
 	}
 
-	inline_dentry = inline_data_addr(dir, ipage);
+	inline_dentry = inline_data_addr(dir, &ifolio->page);
 
-	err = do_convert_inline_dir(dir, ipage, inline_dentry);
+	err = do_convert_inline_dir(dir, &ifolio->page, inline_dentry);
 	if (!err)
-		f2fs_put_page(ipage, 1);
+		f2fs_folio_put(ifolio, true);
 out_fname:
 	f2fs_free_filename(&fname);
 out:
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 090/153] f2fs: Use a folio in f2fs_add_inline_entry()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (88 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 089/153] f2fs: Use a folio in f2fs_try_convert_inline_dir() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 091/153] f2fs: Pass a folio to f2fs_move_inline_dirents() Matthew Wilcox (Oracle)
                   ` (64 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Also convert f2fs_init_inode_metadata() to take a folio.  Remove
Remove three calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c    |  4 ++--
 fs/f2fs/f2fs.h   |  2 +-
 fs/f2fs/inline.c | 20 ++++++++++----------
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 25969d0ae76e..d31cd86305eb 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -515,7 +515,7 @@ static int make_empty_dir(struct inode *inode,
 }
 
 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
-			const struct f2fs_filename *fname, struct page *dpage)
+		const struct f2fs_filename *fname, struct folio *dfolio)
 {
 	struct folio *folio;
 	int err;
@@ -536,7 +536,7 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 			folio_put(folio);
 		}
 
-		err = f2fs_init_acl(inode, dir, &folio->page, dpage);
+		err = f2fs_init_acl(inode, dir, &folio->page, &dfolio->page);
 		if (err)
 			goto put_error;
 
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 75194caaf317..33a6584615bc 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3639,7 +3639,7 @@ int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
 void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
 			struct f2fs_dentry_ptr *d);
 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
-			const struct f2fs_filename *fname, struct page *dpage);
+		const struct f2fs_filename *fname, struct folio *dfolio);
 void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
 			unsigned int current_depth);
 int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots);
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 4684ecc0cb5a..15d14353f2aa 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -636,7 +636,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 			  struct inode *inode, nid_t ino, umode_t mode)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
-	struct page *ipage;
+	struct folio *ifolio;
 	unsigned int bit_pos;
 	void *inline_dentry = NULL;
 	struct f2fs_dentry_ptr d;
@@ -644,16 +644,16 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 	struct page *page = NULL;
 	int err = 0;
 
-	ipage = f2fs_get_inode_page(sbi, dir->i_ino);
-	if (IS_ERR(ipage))
-		return PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(sbi, dir->i_ino);
+	if (IS_ERR(ifolio))
+		return PTR_ERR(ifolio);
 
-	inline_dentry = inline_data_addr(dir, ipage);
+	inline_dentry = inline_data_addr(dir, &ifolio->page);
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
 
 	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
 	if (bit_pos >= d.max) {
-		err = do_convert_inline_dir(dir, ipage, inline_dentry);
+		err = do_convert_inline_dir(dir, &ifolio->page, inline_dentry);
 		if (err)
 			return err;
 		err = -EAGAIN;
@@ -663,19 +663,19 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 	if (inode) {
 		f2fs_down_write_nested(&F2FS_I(inode)->i_sem,
 						SINGLE_DEPTH_NESTING);
-		page = f2fs_init_inode_metadata(inode, dir, fname, ipage);
+		page = f2fs_init_inode_metadata(inode, dir, fname, ifolio);
 		if (IS_ERR(page)) {
 			err = PTR_ERR(page);
 			goto fail;
 		}
 	}
 
-	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
+	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 
 	f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash,
 			   bit_pos);
 
-	set_page_dirty(ipage);
+	folio_mark_dirty(ifolio);
 
 	/* we don't need to mark_inode_dirty now */
 	if (inode) {
@@ -693,7 +693,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 	if (inode)
 		f2fs_up_write(&F2FS_I(inode)->i_sem);
 out:
-	f2fs_put_page(ipage, 1);
+	f2fs_folio_put(ifolio, true);
 	return err;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 091/153] f2fs: Pass a folio to f2fs_move_inline_dirents()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (89 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 090/153] f2fs: Use a folio in f2fs_add_inline_entry() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 092/153] f2fs: Pass a folio to f2fs_move_rehashed_dirents() Matthew Wilcox (Oracle)
                   ` (63 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Pass the folio through do_convert_inline_dir() to
f2fs_move_inline_dirents().  Remove a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 15d14353f2aa..9bcea1ea1c95 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -407,7 +407,7 @@ int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
  * NOTE: ipage is grabbed by caller, but if any error occurs, we should
  * release ipage in this function.
  */
-static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
+static int f2fs_move_inline_dirents(struct inode *dir, struct folio *ifolio,
 							void *inline_dentry)
 {
 	struct folio *folio;
@@ -418,11 +418,11 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
 
 	folio = f2fs_grab_cache_folio(dir->i_mapping, 0, true);
 	if (IS_ERR(folio)) {
-		f2fs_put_page(ipage, 1);
+		f2fs_folio_put(ifolio, true);
 		return PTR_ERR(folio);
 	}
 
-	set_new_dnode(&dn, dir, ipage, NULL, 0);
+	set_new_dnode(&dn, dir, &ifolio->page, NULL, 0);
 	err = f2fs_reserve_block(&dn, 0);
 	if (err)
 		goto out;
@@ -460,7 +460,7 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
 	folio_mark_dirty(folio);
 
 	/* clear inline dir and flag after data writeback */
-	f2fs_truncate_inline_inode(dir, ipage, 0);
+	f2fs_truncate_inline_inode(dir, &ifolio->page, 0);
 
 	stat_dec_inline_dir(dir);
 	clear_inode_flag(dir, FI_INLINE_DENTRY);
@@ -583,13 +583,13 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
 	return err;
 }
 
-static int do_convert_inline_dir(struct inode *dir, struct page *ipage,
+static int do_convert_inline_dir(struct inode *dir, struct folio *ifolio,
 							void *inline_dentry)
 {
 	if (!F2FS_I(dir)->i_dir_level)
-		return f2fs_move_inline_dirents(dir, ipage, inline_dentry);
+		return f2fs_move_inline_dirents(dir, ifolio, inline_dentry);
 	else
-		return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry);
+		return f2fs_move_rehashed_dirents(dir, &ifolio->page, inline_dentry);
 }
 
 int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
@@ -622,7 +622,7 @@ int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
 
 	inline_dentry = inline_data_addr(dir, &ifolio->page);
 
-	err = do_convert_inline_dir(dir, &ifolio->page, inline_dentry);
+	err = do_convert_inline_dir(dir, ifolio, inline_dentry);
 	if (!err)
 		f2fs_folio_put(ifolio, true);
 out_fname:
@@ -653,7 +653,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 
 	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
 	if (bit_pos >= d.max) {
-		err = do_convert_inline_dir(dir, &ifolio->page, inline_dentry);
+		err = do_convert_inline_dir(dir, ifolio, inline_dentry);
 		if (err)
 			return err;
 		err = -EAGAIN;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 092/153] f2fs: Pass a folio to f2fs_move_rehashed_dirents()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (90 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 091/153] f2fs: Pass a folio to f2fs_move_inline_dirents() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 093/153] f2fs: Use a folio in f2fs_do_truncate_blocks() Matthew Wilcox (Oracle)
                   ` (62 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove seven hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 9bcea1ea1c95..1bc6a0d61f7e 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -533,7 +533,7 @@ static int f2fs_add_inline_entries(struct inode *dir, void *inline_dentry)
 	return err;
 }
 
-static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
+static int f2fs_move_rehashed_dirents(struct inode *dir, struct folio *ifolio,
 							void *inline_dentry)
 {
 	void *backup_dentry;
@@ -542,20 +542,20 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
 	backup_dentry = f2fs_kmalloc(F2FS_I_SB(dir),
 				MAX_INLINE_DATA(dir), GFP_F2FS_ZERO);
 	if (!backup_dentry) {
-		f2fs_put_page(ipage, 1);
+		f2fs_folio_put(ifolio, true);
 		return -ENOMEM;
 	}
 
 	memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA(dir));
-	f2fs_truncate_inline_inode(dir, ipage, 0);
+	f2fs_truncate_inline_inode(dir, &ifolio->page, 0);
 
-	unlock_page(ipage);
+	folio_unlock(ifolio);
 
 	err = f2fs_add_inline_entries(dir, backup_dentry);
 	if (err)
 		goto recover;
 
-	lock_page(ipage);
+	folio_lock(ifolio);
 
 	stat_dec_inline_dir(dir);
 	clear_inode_flag(dir, FI_INLINE_DENTRY);
@@ -571,13 +571,13 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
 	kfree(backup_dentry);
 	return 0;
 recover:
-	lock_page(ipage);
-	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
+	folio_lock(ifolio);
+	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 	memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA(dir));
 	f2fs_i_depth_write(dir, 0);
 	f2fs_i_size_write(dir, MAX_INLINE_DATA(dir));
-	set_page_dirty(ipage);
-	f2fs_put_page(ipage, 1);
+	folio_mark_dirty(ifolio);
+	f2fs_folio_put(ifolio, 1);
 
 	kfree(backup_dentry);
 	return err;
@@ -589,7 +589,7 @@ static int do_convert_inline_dir(struct inode *dir, struct folio *ifolio,
 	if (!F2FS_I(dir)->i_dir_level)
 		return f2fs_move_inline_dirents(dir, ifolio, inline_dentry);
 	else
-		return f2fs_move_rehashed_dirents(dir, &ifolio->page, inline_dentry);
+		return f2fs_move_rehashed_dirents(dir, ifolio, inline_dentry);
 }
 
 int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 093/153] f2fs: Use a folio in f2fs_do_truncate_blocks()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (91 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 092/153] f2fs: Pass a folio to f2fs_move_rehashed_dirents() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 094/153] f2fs: Use a folio in f2fs_truncate_xattr_node() Matthew Wilcox (Oracle)
                   ` (61 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Removes two calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/file.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 90e71b54e1d0..f6835c0d1ce8 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -743,7 +743,7 @@ int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 	struct dnode_of_data dn;
 	pgoff_t free_from;
 	int count = 0, err = 0;
-	struct page *ipage;
+	struct folio *ifolio;
 	bool truncate_page = false;
 
 	trace_f2fs_truncate_blocks_enter(inode, from);
@@ -761,9 +761,9 @@ int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 	if (lock)
 		f2fs_lock_op(sbi);
 
-	ipage = f2fs_get_inode_page(sbi, inode->i_ino);
-	if (IS_ERR(ipage)) {
-		err = PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
+	if (IS_ERR(ifolio)) {
+		err = PTR_ERR(ifolio);
 		goto out;
 	}
 
@@ -776,18 +776,18 @@ int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 		dec_valid_block_count(sbi, inode, ei.len);
 		f2fs_update_time(sbi, REQ_TIME);
 
-		f2fs_put_page(ipage, 1);
+		f2fs_folio_put(ifolio, true);
 		goto out;
 	}
 
 	if (f2fs_has_inline_data(inode)) {
-		f2fs_truncate_inline_inode(inode, ipage, from);
-		f2fs_put_page(ipage, 1);
+		f2fs_truncate_inline_inode(inode, &ifolio->page, from);
+		f2fs_folio_put(ifolio, true);
 		truncate_page = true;
 		goto out;
 	}
 
-	set_new_dnode(&dn, inode, ipage, NULL, 0);
+	set_new_dnode(&dn, inode, &ifolio->page, NULL, 0);
 	err = f2fs_get_dnode_of_data(&dn, free_from, LOOKUP_NODE_RA);
 	if (err) {
 		if (err == -ENOENT)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 094/153] f2fs: Use a folio in f2fs_truncate_xattr_node()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (92 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 093/153] f2fs: Use a folio in f2fs_do_truncate_blocks() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 095/153] f2fs: Pass folios to set_new_dnode() Matthew Wilcox (Oracle)
                   ` (60 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index cc4c3ba98140..d1fa244c9fa7 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1242,20 +1242,20 @@ int f2fs_truncate_xattr_node(struct inode *inode)
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	nid_t nid = F2FS_I(inode)->i_xattr_nid;
 	struct dnode_of_data dn;
-	struct page *npage;
+	struct folio *nfolio;
 	int err;
 
 	if (!nid)
 		return 0;
 
-	npage = f2fs_get_xnode_page(sbi, nid);
-	if (IS_ERR(npage))
-		return PTR_ERR(npage);
+	nfolio = f2fs_get_xnode_folio(sbi, nid);
+	if (IS_ERR(nfolio))
+		return PTR_ERR(nfolio);
 
-	set_new_dnode(&dn, inode, NULL, npage, nid);
+	set_new_dnode(&dn, inode, NULL, &nfolio->page, nid);
 	err = truncate_node(&dn);
 	if (err) {
-		f2fs_put_page(npage, 1);
+		f2fs_folio_put(nfolio, true);
 		return err;
 	}
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 095/153] f2fs: Pass folios to set_new_dnode()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (93 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 094/153] f2fs: Use a folio in f2fs_truncate_xattr_node() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 096/153] f2fs: Convert f2fs_convert_inline_page() to f2fs_convert_inline_folio() Matthew Wilcox (Oracle)
                   ` (59 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Removes a lot of conversions of folios into pages.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c   | 8 ++++----
 fs/f2fs/f2fs.h   | 6 +++---
 fs/f2fs/file.c   | 2 +-
 fs/f2fs/inline.c | 4 ++--
 fs/f2fs/node.c   | 4 ++--
 5 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 3776c1f2ad42..b728c5dbf180 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1360,7 +1360,7 @@ struct folio *f2fs_get_new_data_folio(struct inode *inode,
 		return ERR_PTR(-ENOMEM);
 	}
 
-	set_new_dnode(&dn, inode, &ifolio->page, NULL, 0);
+	set_new_dnode(&dn, inode, ifolio, NULL, 0);
 	err = f2fs_reserve_block(&dn, index);
 	if (err) {
 		f2fs_folio_put(folio, true);
@@ -3385,7 +3385,7 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
 		goto unlock_out;
 	}
 
-	set_new_dnode(&dn, inode, &ifolio->page, &ifolio->page, 0);
+	set_new_dnode(&dn, inode, ifolio, ifolio, 0);
 
 	if (f2fs_has_inline_data(inode)) {
 		if (pos + len <= MAX_INLINE_DATA(inode)) {
@@ -3446,7 +3446,7 @@ static int __find_data_block(struct inode *inode, pgoff_t index,
 	if (IS_ERR(ifolio))
 		return PTR_ERR(ifolio);
 
-	set_new_dnode(&dn, inode, &ifolio->page, &ifolio->page, 0);
+	set_new_dnode(&dn, inode, ifolio, ifolio, 0);
 
 	if (!f2fs_lookup_read_extent_cache_block(inode, index,
 						 &dn.data_blkaddr)) {
@@ -3477,7 +3477,7 @@ static int __reserve_data_block(struct inode *inode, pgoff_t index,
 		err = PTR_ERR(ifolio);
 		goto unlock_out;
 	}
-	set_new_dnode(&dn, inode, &ifolio->page, &ifolio->page, 0);
+	set_new_dnode(&dn, inode, ifolio, ifolio, 0);
 
 	if (!f2fs_lookup_read_extent_cache_block(dn.inode, index,
 						&dn.data_blkaddr))
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 33a6584615bc..c2d384a7aab3 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1006,12 +1006,12 @@ struct dnode_of_data {
 };
 
 static inline void set_new_dnode(struct dnode_of_data *dn, struct inode *inode,
-		struct page *ipage, struct page *npage, nid_t nid)
+		struct folio *ifolio, struct folio *nfolio, nid_t nid)
 {
 	memset(dn, 0, sizeof(*dn));
 	dn->inode = inode;
-	dn->inode_page = ipage;
-	dn->node_page = npage;
+	dn->inode_page = &ifolio->page;
+	dn->node_page = &nfolio->page;
 	dn->nid = nid;
 }
 
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index f6835c0d1ce8..66c743a09756 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -787,7 +787,7 @@ int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 		goto out;
 	}
 
-	set_new_dnode(&dn, inode, &ifolio->page, NULL, 0);
+	set_new_dnode(&dn, inode, ifolio, NULL, 0);
 	err = f2fs_get_dnode_of_data(&dn, free_from, LOOKUP_NODE_RA);
 	if (err) {
 		if (err == -ENOENT)
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 1bc6a0d61f7e..7638854bc7d9 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -243,7 +243,7 @@ int f2fs_convert_inline_inode(struct inode *inode)
 		goto out;
 	}
 
-	set_new_dnode(&dn, inode, &ifolio->page, &ifolio->page, 0);
+	set_new_dnode(&dn, inode, ifolio, ifolio, 0);
 
 	if (f2fs_has_inline_data(inode))
 		err = f2fs_convert_inline_page(&dn, &folio->page);
@@ -422,7 +422,7 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct folio *ifolio,
 		return PTR_ERR(folio);
 	}
 
-	set_new_dnode(&dn, dir, &ifolio->page, NULL, 0);
+	set_new_dnode(&dn, dir, ifolio, NULL, 0);
 	err = f2fs_reserve_block(&dn, 0);
 	if (err)
 		goto out;
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index d1fa244c9fa7..3c8c8c8a5508 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1156,7 +1156,7 @@ int f2fs_truncate_inode_blocks(struct inode *inode, pgoff_t from)
 		return PTR_ERR(folio);
 	}
 
-	set_new_dnode(&dn, inode, &folio->page, NULL, 0);
+	set_new_dnode(&dn, inode, folio, NULL, 0);
 	folio_unlock(folio);
 
 	ri = F2FS_INODE(&folio->page);
@@ -1252,7 +1252,7 @@ int f2fs_truncate_xattr_node(struct inode *inode)
 	if (IS_ERR(nfolio))
 		return PTR_ERR(nfolio);
 
-	set_new_dnode(&dn, inode, NULL, &nfolio->page, nid);
+	set_new_dnode(&dn, inode, NULL, nfolio, nid);
 	err = truncate_node(&dn);
 	if (err) {
 		f2fs_folio_put(nfolio, true);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 096/153] f2fs: Convert f2fs_convert_inline_page() to f2fs_convert_inline_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (94 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 095/153] f2fs: Pass folios to set_new_dnode() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 097/153] f2fs: Use a folio in read_xattr_block() Matthew Wilcox (Oracle)
                   ` (58 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Both callers have a folio, so pass it in.  Removes seven calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c   |  2 +-
 fs/f2fs/f2fs.h   |  4 ++--
 fs/f2fs/inline.c | 18 +++++++++---------
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index b728c5dbf180..a6c7dc56a0e1 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -3395,7 +3395,7 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
 				set_page_private_inline(&ifolio->page);
 			goto out;
 		}
-		err = f2fs_convert_inline_page(&dn, folio_page(folio, 0));
+		err = f2fs_convert_inline_folio(&dn, folio);
 		if (err || dn.data_blkaddr != NULL_ADDR)
 			goto out;
 	}
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index c2d384a7aab3..9257ea0f2ecf 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3351,7 +3351,7 @@ static inline int inline_xattr_size(struct inode *inode)
 
 /*
  * Notice: check inline_data flag without inode page lock is unsafe.
- * It could change at any time by f2fs_convert_inline_page().
+ * It could change at any time by f2fs_convert_inline_folio().
  */
 static inline int f2fs_has_inline_data(struct inode *inode)
 {
@@ -4279,7 +4279,7 @@ void f2fs_do_read_inline_data(struct folio *folio, struct page *ipage);
 void f2fs_truncate_inline_inode(struct inode *inode,
 						struct page *ipage, u64 from);
 int f2fs_read_inline_data(struct inode *inode, struct folio *folio);
-int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page);
+int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio);
 int f2fs_convert_inline_inode(struct inode *inode);
 int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry);
 int f2fs_write_inline_data(struct inode *inode, struct folio *folio);
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 7638854bc7d9..508004f4df4f 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -142,7 +142,7 @@ int f2fs_read_inline_data(struct inode *inode, struct folio *folio)
 	return 0;
 }
 
-int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
+int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio)
 {
 	struct f2fs_io_info fio = {
 		.sbi = F2FS_I_SB(dn->inode),
@@ -150,7 +150,7 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
 		.type = DATA,
 		.op = REQ_OP_WRITE,
 		.op_flags = REQ_SYNC | REQ_PRIO,
-		.page = page,
+		.page = &folio->page,
 		.encrypted_page = NULL,
 		.io_type = FS_DATA_IO,
 	};
@@ -182,20 +182,20 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
 		return -EFSCORRUPTED;
 	}
 
-	f2fs_bug_on(F2FS_P_SB(page), folio_test_writeback(page_folio(page)));
+	f2fs_bug_on(F2FS_F_SB(folio), folio_test_writeback(folio));
 
-	f2fs_do_read_inline_data(page_folio(page), dn->inode_page);
-	set_page_dirty(page);
+	f2fs_do_read_inline_data(folio, dn->inode_page);
+	folio_mark_dirty(folio);
 
 	/* clear dirty state */
-	dirty = clear_page_dirty_for_io(page);
+	dirty = folio_clear_dirty_for_io(folio);
 
 	/* write data page to try to make data consistent */
-	set_page_writeback(page);
+	folio_start_writeback(folio);
 	fio.old_blkaddr = dn->data_blkaddr;
 	set_inode_flag(dn->inode, FI_HOT_DATA);
 	f2fs_outplace_write_data(dn, &fio);
-	f2fs_wait_on_page_writeback(page, DATA, true, true);
+	f2fs_folio_wait_writeback(folio, DATA, true, true);
 	if (dirty) {
 		inode_dec_dirty_pages(dn->inode);
 		f2fs_remove_dirty_inode(dn->inode);
@@ -246,7 +246,7 @@ int f2fs_convert_inline_inode(struct inode *inode)
 	set_new_dnode(&dn, inode, ifolio, ifolio, 0);
 
 	if (f2fs_has_inline_data(inode))
-		err = f2fs_convert_inline_page(&dn, &folio->page);
+		err = f2fs_convert_inline_folio(&dn, folio);
 
 	f2fs_put_dnode(&dn);
 out:
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 097/153] f2fs: Use a folio in read_xattr_block()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (95 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 096/153] f2fs: Convert f2fs_convert_inline_page() to f2fs_convert_inline_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 098/153] f2fs: Remove f2fs_get_xnode_page() Matthew Wilcox (Oracle)
                   ` (57 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to compound_head()

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/xattr.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index d58b1e44e133..dd632df8d944 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -299,17 +299,17 @@ static int read_xattr_block(struct inode *inode, void *txattr_addr)
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	nid_t xnid = F2FS_I(inode)->i_xattr_nid;
 	unsigned int inline_size = inline_xattr_size(inode);
-	struct page *xpage;
+	struct folio *xfolio;
 	void *xattr_addr;
 
 	/* The inode already has an extended attribute block. */
-	xpage = f2fs_get_xnode_page(sbi, xnid);
-	if (IS_ERR(xpage))
-		return PTR_ERR(xpage);
+	xfolio = f2fs_get_xnode_folio(sbi, xnid);
+	if (IS_ERR(xfolio))
+		return PTR_ERR(xfolio);
 
-	xattr_addr = page_address(xpage);
+	xattr_addr = folio_address(xfolio);
 	memcpy(txattr_addr + inline_size, xattr_addr, VALID_XATTR_BLOCK_SIZE);
-	f2fs_put_page(xpage, 1);
+	f2fs_folio_put(xfolio, true);
 
 	return 0;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 098/153] f2fs: Remove f2fs_get_xnode_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (96 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 097/153] f2fs: Use a folio in read_xattr_block() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 099/153] f2fs: Use a folio in f2fs_write_inline_data() Matthew Wilcox (Oracle)
                   ` (56 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have now been converted to call f2fs_get_xnode_folio().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 1 -
 fs/f2fs/node.c | 8 --------
 2 files changed, 9 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 9257ea0f2ecf..cf61763e2209 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3733,7 +3733,6 @@ struct folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct page *f2fs_get_inode_page(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid);
-struct page *f2fs_get_xnode_page(struct f2fs_sb_info *sbi, pgoff_t xnid);
 int f2fs_move_node_folio(struct folio *node_folio, int gc_type);
 void f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 3c8c8c8a5508..2db41552ae76 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1559,14 +1559,6 @@ struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid)
 	return __get_node_folio(sbi, xnid, NULL, 0, NODE_TYPE_XATTR);
 }
 
-struct page *f2fs_get_xnode_page(struct f2fs_sb_info *sbi, pgoff_t xnid)
-{
-	struct folio *folio = __get_node_folio(sbi, xnid, NULL, 0,
-						NODE_TYPE_XATTR);
-
-	return &folio->page;
-}
-
 static struct folio *f2fs_get_node_folio_ra(struct folio *parent, int start)
 {
 	struct f2fs_sb_info *sbi = F2FS_F_SB(parent);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 099/153] f2fs: Use a folio in f2fs_write_inline_data()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (97 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 098/153] f2fs: Remove f2fs_get_xnode_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:11 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 100/153] f2fs: Use a folio in f2fs_read_inline_data() Matthew Wilcox (Oracle)
                   ` (55 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:11 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove four calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 508004f4df4f..55c0b82d43d5 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -263,31 +263,31 @@ int f2fs_convert_inline_inode(struct inode *inode)
 int f2fs_write_inline_data(struct inode *inode, struct folio *folio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	struct page *ipage;
+	struct folio *ifolio;
 
-	ipage = f2fs_get_inode_page(sbi, inode->i_ino);
-	if (IS_ERR(ipage))
-		return PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
+	if (IS_ERR(ifolio))
+		return PTR_ERR(ifolio);
 
 	if (!f2fs_has_inline_data(inode)) {
-		f2fs_put_page(ipage, 1);
+		f2fs_folio_put(ifolio, true);
 		return -EAGAIN;
 	}
 
 	f2fs_bug_on(F2FS_I_SB(inode), folio->index);
 
-	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
-	memcpy_from_folio(inline_data_addr(inode, ipage),
+	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
+	memcpy_from_folio(inline_data_addr(inode, &ifolio->page),
 			 folio, 0, MAX_INLINE_DATA(inode));
-	set_page_dirty(ipage);
+	folio_mark_dirty(ifolio);
 
 	f2fs_clear_page_cache_dirty_tag(folio);
 
 	set_inode_flag(inode, FI_APPEND_WRITE);
 	set_inode_flag(inode, FI_DATA_EXIST);
 
-	clear_page_private_inline(ipage);
-	f2fs_put_page(ipage, 1);
+	clear_page_private_inline(&ifolio->page);
+	f2fs_folio_put(ifolio, 1);
 	return 0;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 100/153] f2fs: Use a folio in f2fs_read_inline_data()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (98 preceding siblings ...)
  2025-03-31 20:11 ` [f2fs-dev] [PATCH 099/153] f2fs: Use a folio in f2fs_write_inline_data() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 101/153] f2fs: Use a folio in f2fs_recover_inline_data() Matthew Wilcox (Oracle)
                   ` (54 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove two calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 55c0b82d43d5..245cbff2ca2c 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -117,27 +117,27 @@ void f2fs_truncate_inline_inode(struct inode *inode,
 
 int f2fs_read_inline_data(struct inode *inode, struct folio *folio)
 {
-	struct page *ipage;
+	struct folio *ifolio;
 
-	ipage = f2fs_get_inode_page(F2FS_I_SB(inode), inode->i_ino);
-	if (IS_ERR(ipage)) {
+	ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino);
+	if (IS_ERR(ifolio)) {
 		folio_unlock(folio);
-		return PTR_ERR(ipage);
+		return PTR_ERR(ifolio);
 	}
 
 	if (!f2fs_has_inline_data(inode)) {
-		f2fs_put_page(ipage, 1);
+		f2fs_folio_put(ifolio, true);
 		return -EAGAIN;
 	}
 
 	if (folio_index(folio))
 		folio_zero_segment(folio, 0, folio_size(folio));
 	else
-		f2fs_do_read_inline_data(folio, ipage);
+		f2fs_do_read_inline_data(folio, &ifolio->page);
 
 	if (!folio_test_uptodate(folio))
 		folio_mark_uptodate(folio);
-	f2fs_put_page(ipage, 1);
+	f2fs_folio_put(ifolio, true);
 	folio_unlock(folio);
 	return 0;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 101/153] f2fs: Use a folio in f2fs_recover_inline_data()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (99 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 100/153] f2fs: Use a folio in f2fs_read_inline_data() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 102/153] f2fs: Use a folio in f2fs_find_in_inline_dir() Matthew Wilcox (Oracle)
                   ` (53 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove four calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 245cbff2ca2c..13ede6ccc312 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -296,7 +296,6 @@ int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct f2fs_inode *ri = NULL;
 	void *src_addr, *dst_addr;
-	struct page *ipage;
 
 	/*
 	 * The inline_data recovery policy is as follows.
@@ -311,33 +310,34 @@ int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
 
 	if (f2fs_has_inline_data(inode) &&
 			ri && (ri->i_inline & F2FS_INLINE_DATA)) {
+		struct folio *ifolio;
 process_inline:
-		ipage = f2fs_get_inode_page(sbi, inode->i_ino);
-		if (IS_ERR(ipage))
-			return PTR_ERR(ipage);
+		ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
+		if (IS_ERR(ifolio))
+			return PTR_ERR(ifolio);
 
-		f2fs_wait_on_page_writeback(ipage, NODE, true, true);
+		f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 
 		src_addr = inline_data_addr(inode, npage);
-		dst_addr = inline_data_addr(inode, ipage);
+		dst_addr = inline_data_addr(inode, &ifolio->page);
 		memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
 
 		set_inode_flag(inode, FI_INLINE_DATA);
 		set_inode_flag(inode, FI_DATA_EXIST);
 
-		set_page_dirty(ipage);
-		f2fs_put_page(ipage, 1);
+		folio_mark_dirty(ifolio);
+		f2fs_folio_put(ifolio, true);
 		return 1;
 	}
 
 	if (f2fs_has_inline_data(inode)) {
-		ipage = f2fs_get_inode_page(sbi, inode->i_ino);
-		if (IS_ERR(ipage))
-			return PTR_ERR(ipage);
-		f2fs_truncate_inline_inode(inode, ipage, 0);
+		struct folio *ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
+		if (IS_ERR(ifolio))
+			return PTR_ERR(ifolio);
+		f2fs_truncate_inline_inode(inode, &ifolio->page, 0);
 		stat_dec_inline_inode(inode);
 		clear_inode_flag(inode, FI_INLINE_DATA);
-		f2fs_put_page(ipage, 1);
+		f2fs_folio_put(ifolio, true);
 	} else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) {
 		int ret;
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 102/153] f2fs: Use a folio in f2fs_find_in_inline_dir()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (100 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 101/153] f2fs: Use a folio in f2fs_recover_inline_data() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 103/153] f2fs: Use a folio in f2fs_empty_inline_dir() Matthew Wilcox (Oracle)
                   ` (52 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove two calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 13ede6ccc312..8e175e5ee23f 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -358,28 +358,28 @@ struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
 	struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
 	struct f2fs_dir_entry *de;
 	struct f2fs_dentry_ptr d;
-	struct page *ipage;
+	struct folio *ifolio;
 	void *inline_dentry;
 
-	ipage = f2fs_get_inode_page(sbi, dir->i_ino);
-	if (IS_ERR(ipage)) {
-		*res_page = ipage;
+	ifolio = f2fs_get_inode_folio(sbi, dir->i_ino);
+	if (IS_ERR(ifolio)) {
+		*res_page = &ifolio->page;
 		return NULL;
 	}
 
-	inline_dentry = inline_data_addr(dir, ipage);
+	inline_dentry = inline_data_addr(dir, &ifolio->page);
 
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
 	de = f2fs_find_target_dentry(&d, fname, NULL, use_hash);
-	unlock_page(ipage);
+	folio_unlock(ifolio);
 	if (IS_ERR(de)) {
 		*res_page = ERR_CAST(de);
 		de = NULL;
 	}
 	if (de)
-		*res_page = ipage;
+		*res_page = &ifolio->page;
 	else
-		f2fs_put_page(ipage, 0);
+		f2fs_folio_put(ifolio, false);
 
 	return de;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 103/153] f2fs: Use a folio in f2fs_empty_inline_dir()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (101 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 102/153] f2fs: Use a folio in f2fs_find_in_inline_dir() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 104/153] f2fs: Use a folio in f2fs_read_inline_dir() Matthew Wilcox (Oracle)
                   ` (51 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 8e175e5ee23f..58f427e9d1f7 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -729,21 +729,21 @@ void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
 bool f2fs_empty_inline_dir(struct inode *dir)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
-	struct page *ipage;
+	struct folio *ifolio;
 	unsigned int bit_pos = 2;
 	void *inline_dentry;
 	struct f2fs_dentry_ptr d;
 
-	ipage = f2fs_get_inode_page(sbi, dir->i_ino);
-	if (IS_ERR(ipage))
+	ifolio = f2fs_get_inode_folio(sbi, dir->i_ino);
+	if (IS_ERR(ifolio))
 		return false;
 
-	inline_dentry = inline_data_addr(dir, ipage);
+	inline_dentry = inline_data_addr(dir, &ifolio->page);
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
 
 	bit_pos = find_next_bit_le(d.bitmap, d.max, bit_pos);
 
-	f2fs_put_page(ipage, 1);
+	f2fs_folio_put(ifolio, true);
 
 	if (bit_pos < d.max)
 		return false;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 104/153] f2fs: Use a folio in f2fs_read_inline_dir()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (102 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 103/153] f2fs: Use a folio in f2fs_empty_inline_dir() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 105/153] f2fs: Use a folio in f2fs_inline_data_fiemap() Matthew Wilcox (Oracle)
                   ` (50 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove two calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 58f427e9d1f7..fda56c7e848e 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -755,7 +755,7 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
 				struct fscrypt_str *fstr)
 {
 	struct inode *inode = file_inode(file);
-	struct page *ipage = NULL;
+	struct folio *ifolio = NULL;
 	struct f2fs_dentry_ptr d;
 	void *inline_dentry = NULL;
 	int err;
@@ -765,17 +765,17 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
 	if (ctx->pos == d.max)
 		return 0;
 
-	ipage = f2fs_get_inode_page(F2FS_I_SB(inode), inode->i_ino);
-	if (IS_ERR(ipage))
-		return PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino);
+	if (IS_ERR(ifolio))
+		return PTR_ERR(ifolio);
 
 	/*
 	 * f2fs_readdir was protected by inode.i_rwsem, it is safe to access
 	 * ipage without page's lock held.
 	 */
-	unlock_page(ipage);
+	folio_unlock(ifolio);
 
-	inline_dentry = inline_data_addr(inode, ipage);
+	inline_dentry = inline_data_addr(inode, &ifolio->page);
 
 	make_dentry_ptr_inline(inode, &d, inline_dentry);
 
@@ -783,7 +783,7 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
 	if (!err)
 		ctx->pos = d.max;
 
-	f2fs_put_page(ipage, 0);
+	f2fs_folio_put(ifolio, false);
 	return err < 0 ? err : 0;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 105/153] f2fs: Use a folio in f2fs_inline_data_fiemap()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (103 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 104/153] f2fs: Use a folio in f2fs_read_inline_dir() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 106/153] f2fs: Use a folio in f2fs_update_inode_page() Matthew Wilcox (Oracle)
                   ` (49 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inline.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index fda56c7e848e..81a6ab05363e 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -794,12 +794,12 @@ int f2fs_inline_data_fiemap(struct inode *inode,
 	__u32 flags = FIEMAP_EXTENT_DATA_INLINE | FIEMAP_EXTENT_NOT_ALIGNED |
 		FIEMAP_EXTENT_LAST;
 	struct node_info ni;
-	struct page *ipage;
+	struct folio *ifolio;
 	int err = 0;
 
-	ipage = f2fs_get_inode_page(F2FS_I_SB(inode), inode->i_ino);
-	if (IS_ERR(ipage))
-		return PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino);
+	if (IS_ERR(ifolio))
+		return PTR_ERR(ifolio);
 
 	if ((S_ISREG(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
 				!f2fs_has_inline_data(inode)) {
@@ -824,11 +824,11 @@ int f2fs_inline_data_fiemap(struct inode *inode,
 		goto out;
 
 	byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits;
-	byteaddr += (char *)inline_data_addr(inode, ipage) -
-					(char *)F2FS_INODE(ipage);
+	byteaddr += (char *)inline_data_addr(inode, &ifolio->page) -
+					(char *)F2FS_INODE(&ifolio->page);
 	err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags);
 	trace_f2fs_fiemap(inode, start, byteaddr, ilen, flags, err);
 out:
-	f2fs_put_page(ipage, 1);
+	f2fs_folio_put(ifolio, true);
 	return err;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 106/153] f2fs: Use a folio in f2fs_update_inode_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (104 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 105/153] f2fs: Use a folio in f2fs_inline_data_fiemap() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 107/153] f2fs: Use a folio in do_read_inode() Matthew Wilcox (Oracle)
                   ` (48 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inode.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 38512f2d4b28..c122761eaa86 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -752,12 +752,12 @@ void f2fs_update_inode(struct inode *inode, struct page *node_page)
 void f2fs_update_inode_page(struct inode *inode)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	struct page *node_page;
+	struct folio *node_folio;
 	int count = 0;
 retry:
-	node_page = f2fs_get_inode_page(sbi, inode->i_ino);
-	if (IS_ERR(node_page)) {
-		int err = PTR_ERR(node_page);
+	node_folio = f2fs_get_inode_folio(sbi, inode->i_ino);
+	if (IS_ERR(node_folio)) {
+		int err = PTR_ERR(node_folio);
 
 		/* The node block was truncated. */
 		if (err == -ENOENT)
@@ -772,8 +772,8 @@ void f2fs_update_inode_page(struct inode *inode)
 		f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_UPDATE_INODE);
 		return;
 	}
-	f2fs_update_inode(inode, node_page);
-	f2fs_put_page(node_page, 1);
+	f2fs_update_inode(inode, &node_folio->page);
+	f2fs_folio_put(node_folio, true);
 }
 
 int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 107/153] f2fs: Use a folio in do_read_inode()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (105 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 106/153] f2fs: Use a folio in f2fs_update_inode_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 108/153] f2fs: Pass folios to f2fs_init_acl() Matthew Wilcox (Oracle)
                   ` (47 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove five calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inode.c | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index c122761eaa86..cbfd536efe20 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -400,7 +400,7 @@ static int do_read_inode(struct inode *inode)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct f2fs_inode_info *fi = F2FS_I(inode);
-	struct page *node_page;
+	struct folio *node_folio;
 	struct f2fs_inode *ri;
 	projid_t i_projid;
 
@@ -408,11 +408,11 @@ static int do_read_inode(struct inode *inode)
 	if (f2fs_check_nid_range(sbi, inode->i_ino))
 		return -EINVAL;
 
-	node_page = f2fs_get_inode_page(sbi, inode->i_ino);
-	if (IS_ERR(node_page))
-		return PTR_ERR(node_page);
+	node_folio = f2fs_get_inode_folio(sbi, inode->i_ino);
+	if (IS_ERR(node_folio))
+		return PTR_ERR(node_folio);
 
-	ri = F2FS_INODE(node_page);
+	ri = F2FS_INODE(&node_folio->page);
 
 	inode->i_mode = le16_to_cpu(ri->i_mode);
 	i_uid_write(inode, le32_to_cpu(ri->i_uid));
@@ -462,8 +462,8 @@ static int do_read_inode(struct inode *inode)
 		fi->i_inline_xattr_size = 0;
 	}
 
-	if (!sanity_check_inode(inode, node_page)) {
-		f2fs_put_page(node_page, 1);
+	if (!sanity_check_inode(inode, &node_folio->page)) {
+		f2fs_folio_put(node_folio, true);
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_handle_error(sbi, ERROR_CORRUPTED_INODE);
 		return -EFSCORRUPTED;
@@ -471,17 +471,17 @@ static int do_read_inode(struct inode *inode)
 
 	/* check data exist */
 	if (f2fs_has_inline_data(inode) && !f2fs_exist_data(inode))
-		__recover_inline_status(inode, node_page);
+		__recover_inline_status(inode, &node_folio->page);
 
 	/* try to recover cold bit for non-dir inode */
-	if (!S_ISDIR(inode->i_mode) && !is_cold_node(node_page)) {
-		f2fs_wait_on_page_writeback(node_page, NODE, true, true);
-		set_cold_node(node_page, false);
-		set_page_dirty(node_page);
+	if (!S_ISDIR(inode->i_mode) && !is_cold_node(&node_folio->page)) {
+		f2fs_folio_wait_writeback(node_folio, NODE, true, true);
+		set_cold_node(&node_folio->page, false);
+		folio_mark_dirty(node_folio);
 	}
 
 	/* get rdev by using inline_info */
-	__get_inode_rdev(inode, node_page);
+	__get_inode_rdev(inode, &node_folio->page);
 
 	if (!f2fs_need_inode_block_update(sbi, inode->i_ino))
 		fi->last_disk_size = inode->i_size;
@@ -524,17 +524,17 @@ static int do_read_inode(struct inode *inode)
 
 	init_idisk_time(inode);
 
-	if (!sanity_check_extent_cache(inode, node_page)) {
-		f2fs_put_page(node_page, 1);
+	if (!sanity_check_extent_cache(inode, &node_folio->page)) {
+		f2fs_folio_put(node_folio, true);
 		f2fs_handle_error(sbi, ERROR_CORRUPTED_INODE);
 		return -EFSCORRUPTED;
 	}
 
 	/* Need all the flag bits */
-	f2fs_init_read_extent_tree(inode, node_page);
+	f2fs_init_read_extent_tree(inode, &node_folio->page);
 	f2fs_init_age_extent_tree(inode);
 
-	f2fs_put_page(node_page, 1);
+	f2fs_folio_put(node_folio, true);
 
 	stat_inc_inline_xattr(inode);
 	stat_inc_inline_inode(inode);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 108/153] f2fs: Pass folios to f2fs_init_acl()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (106 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 107/153] f2fs: Use a folio in do_read_inode() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 109/153] f2fs: Pass a folio to f2fs_setxattr() Matthew Wilcox (Oracle)
                   ` (46 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The one caller already has folios, so pass them in, and further pass
them to __f2fs_set_acl() and f2fs_acl_create().  There should be
no change to the generated code for this commit.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/acl.c | 27 +++++++++++++--------------
 fs/f2fs/acl.h | 10 +++++-----
 fs/f2fs/dir.c |  2 +-
 3 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c
index 1fbc0607363b..1ec6125cadc5 100644
--- a/fs/f2fs/acl.c
+++ b/fs/f2fs/acl.c
@@ -227,7 +227,7 @@ static int f2fs_acl_update_mode(struct mnt_idmap *idmap,
 
 static int __f2fs_set_acl(struct mnt_idmap *idmap,
 			struct inode *inode, int type,
-			struct posix_acl *acl, struct page *ipage)
+			struct posix_acl *acl, struct folio *ifolio)
 {
 	int name_index;
 	void *value = NULL;
@@ -238,9 +238,8 @@ static int __f2fs_set_acl(struct mnt_idmap *idmap,
 	switch (type) {
 	case ACL_TYPE_ACCESS:
 		name_index = F2FS_XATTR_INDEX_POSIX_ACL_ACCESS;
-		if (acl && !ipage) {
-			error = f2fs_acl_update_mode(idmap, inode,
-								&mode, &acl);
+		if (acl && !ifolio) {
+			error = f2fs_acl_update_mode(idmap, inode, &mode, &acl);
 			if (error)
 				return error;
 			set_acl_inode(inode, mode);
@@ -265,7 +264,7 @@ static int __f2fs_set_acl(struct mnt_idmap *idmap,
 		}
 	}
 
-	error = f2fs_setxattr(inode, name_index, "", value, size, ipage, 0);
+	error = f2fs_setxattr(inode, name_index, "", value, size, &ifolio->page, 0);
 
 	kfree(value);
 	if (!error)
@@ -360,7 +359,7 @@ static int f2fs_acl_create_masq(struct posix_acl *acl, umode_t *mode_p)
 
 static int f2fs_acl_create(struct inode *dir, umode_t *mode,
 		struct posix_acl **default_acl, struct posix_acl **acl,
-		struct page *dpage)
+		struct folio *dfolio)
 {
 	struct posix_acl *p;
 	struct posix_acl *clone;
@@ -372,7 +371,7 @@ static int f2fs_acl_create(struct inode *dir, umode_t *mode,
 	if (S_ISLNK(*mode) || !IS_POSIXACL(dir))
 		return 0;
 
-	p = __f2fs_get_acl(dir, ACL_TYPE_DEFAULT, dpage);
+	p = __f2fs_get_acl(dir, ACL_TYPE_DEFAULT, &dfolio->page);
 	if (!p || p == ERR_PTR(-EOPNOTSUPP)) {
 		*mode &= ~current_umask();
 		return 0;
@@ -409,29 +408,29 @@ static int f2fs_acl_create(struct inode *dir, umode_t *mode,
 	return ret;
 }
 
-int f2fs_init_acl(struct inode *inode, struct inode *dir, struct page *ipage,
-							struct page *dpage)
+int f2fs_init_acl(struct inode *inode, struct inode *dir, struct folio *ifolio,
+							struct folio *dfolio)
 {
 	struct posix_acl *default_acl = NULL, *acl = NULL;
 	int error;
 
-	error = f2fs_acl_create(dir, &inode->i_mode, &default_acl, &acl, dpage);
+	error = f2fs_acl_create(dir, &inode->i_mode, &default_acl, &acl, dfolio);
 	if (error)
 		return error;
 
 	f2fs_mark_inode_dirty_sync(inode, true);
 
 	if (default_acl) {
-		error = __f2fs_set_acl(NULL, inode, ACL_TYPE_DEFAULT, default_acl,
-				       ipage);
+		error = __f2fs_set_acl(NULL, inode, ACL_TYPE_DEFAULT,
+				default_acl, ifolio);
 		posix_acl_release(default_acl);
 	} else {
 		inode->i_default_acl = NULL;
 	}
 	if (acl) {
 		if (!error)
-			error = __f2fs_set_acl(NULL, inode, ACL_TYPE_ACCESS, acl,
-					       ipage);
+			error = __f2fs_set_acl(NULL, inode, ACL_TYPE_ACCESS,
+					acl, ifolio);
 		posix_acl_release(acl);
 	} else {
 		inode->i_acl = NULL;
diff --git a/fs/f2fs/acl.h b/fs/f2fs/acl.h
index 94ebfbfbdc6f..20e87e63c089 100644
--- a/fs/f2fs/acl.h
+++ b/fs/f2fs/acl.h
@@ -33,17 +33,17 @@ struct f2fs_acl_header {
 
 #ifdef CONFIG_F2FS_FS_POSIX_ACL
 
-extern struct posix_acl *f2fs_get_acl(struct inode *, int, bool);
-extern int f2fs_set_acl(struct mnt_idmap *, struct dentry *,
+struct posix_acl *f2fs_get_acl(struct inode *, int, bool);
+int f2fs_set_acl(struct mnt_idmap *, struct dentry *,
 			struct posix_acl *, int);
-extern int f2fs_init_acl(struct inode *, struct inode *, struct page *,
-							struct page *);
+int f2fs_init_acl(struct inode *, struct inode *, struct folio *ifolio,
+		struct folio *dfolio);
 #else
 #define f2fs_get_acl	NULL
 #define f2fs_set_acl	NULL
 
 static inline int f2fs_init_acl(struct inode *inode, struct inode *dir,
-				struct page *ipage, struct page *dpage)
+				struct folio *ifolio, struct folio *dfolio)
 {
 	return 0;
 }
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index d31cd86305eb..bd404a5de4a1 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -536,7 +536,7 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 			folio_put(folio);
 		}
 
-		err = f2fs_init_acl(inode, dir, &folio->page, &dfolio->page);
+		err = f2fs_init_acl(inode, dir, folio, dfolio);
 		if (err)
 			goto put_error;
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 109/153] f2fs: Pass a folio to f2fs_setxattr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (107 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 108/153] f2fs: Pass folios to f2fs_init_acl() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 110/153] f2fs: Pass a folio to __f2fs_setxattr() Matthew Wilcox (Oracle)
                   ` (45 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Also convert f2fs_initxattrs() to take a folio.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/acl.c   |  2 +-
 fs/f2fs/dir.c   |  2 +-
 fs/f2fs/xattr.c | 16 ++++++++--------
 fs/f2fs/xattr.h | 22 +++++++++++-----------
 4 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c
index 1ec6125cadc5..0a4d160235e0 100644
--- a/fs/f2fs/acl.c
+++ b/fs/f2fs/acl.c
@@ -264,7 +264,7 @@ static int __f2fs_set_acl(struct mnt_idmap *idmap,
 		}
 	}
 
-	error = f2fs_setxattr(inode, name_index, "", value, size, &ifolio->page, 0);
+	error = f2fs_setxattr(inode, name_index, "", value, size, ifolio, 0);
 
 	kfree(value);
 	if (!error)
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index bd404a5de4a1..4decec1800bf 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -542,7 +542,7 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 
 		err = f2fs_init_security(inode, dir,
 					 fname ? fname->usr_fname : NULL,
-					 &folio->page);
+					 folio);
 		if (err)
 			goto put_error;
 
diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index dd632df8d944..10f4f82bdbde 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -136,7 +136,7 @@ static int f2fs_xattr_advise_set(const struct xattr_handler *handler,
 
 #ifdef CONFIG_F2FS_FS_SECURITY
 static int f2fs_initxattrs(struct inode *inode, const struct xattr *xattr_array,
-		void *page)
+		void *folio)
 {
 	const struct xattr *xattr;
 	int err = 0;
@@ -144,7 +144,7 @@ static int f2fs_initxattrs(struct inode *inode, const struct xattr *xattr_array,
 	for (xattr = xattr_array; xattr->name != NULL; xattr++) {
 		err = f2fs_setxattr(inode, F2FS_XATTR_INDEX_SECURITY,
 				xattr->name, xattr->value,
-				xattr->value_len, (struct page *)page, 0);
+				xattr->value_len, folio, 0);
 		if (err < 0)
 			break;
 	}
@@ -152,10 +152,10 @@ static int f2fs_initxattrs(struct inode *inode, const struct xattr *xattr_array,
 }
 
 int f2fs_init_security(struct inode *inode, struct inode *dir,
-				const struct qstr *qstr, struct page *ipage)
+				const struct qstr *qstr, struct folio *ifolio)
 {
 	return security_inode_init_security(inode, dir, qstr,
-				&f2fs_initxattrs, ipage);
+				f2fs_initxattrs, ifolio);
 }
 #endif
 
@@ -800,7 +800,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
 
 int f2fs_setxattr(struct inode *inode, int index, const char *name,
 				const void *value, size_t size,
-				struct page *ipage, int flags)
+				struct folio *ifolio, int flags)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	int err;
@@ -815,14 +815,14 @@ int f2fs_setxattr(struct inode *inode, int index, const char *name,
 		return err;
 
 	/* this case is only from f2fs_init_inode_metadata */
-	if (ipage)
+	if (ifolio)
 		return __f2fs_setxattr(inode, index, name, value,
-						size, ipage, flags);
+						size, &ifolio->page, flags);
 	f2fs_balance_fs(sbi, true);
 
 	f2fs_lock_op(sbi);
 	f2fs_down_write(&F2FS_I(inode)->i_xattr_sem);
-	err = __f2fs_setxattr(inode, index, name, value, size, ipage, flags);
+	err = __f2fs_setxattr(inode, index, name, value, size, NULL, flags);
 	f2fs_up_write(&F2FS_I(inode)->i_xattr_sem);
 	f2fs_unlock_op(sbi);
 
diff --git a/fs/f2fs/xattr.h b/fs/f2fs/xattr.h
index a005ffdcf717..e0f7b865c116 100644
--- a/fs/f2fs/xattr.h
+++ b/fs/f2fs/xattr.h
@@ -127,20 +127,20 @@ extern const struct xattr_handler f2fs_xattr_security_handler;
 
 extern const struct xattr_handler * const f2fs_xattr_handlers[];
 
-extern int f2fs_setxattr(struct inode *, int, const char *,
-				const void *, size_t, struct page *, int);
-extern int f2fs_getxattr(struct inode *, int, const char *, void *,
-						size_t, struct page *);
-extern ssize_t f2fs_listxattr(struct dentry *, char *, size_t);
-extern int f2fs_init_xattr_caches(struct f2fs_sb_info *);
-extern void f2fs_destroy_xattr_caches(struct f2fs_sb_info *);
+int f2fs_setxattr(struct inode *, int, const char *, const void *,
+		size_t, struct folio *, int);
+int f2fs_getxattr(struct inode *, int, const char *, void *,
+		size_t, struct page *);
+ssize_t f2fs_listxattr(struct dentry *, char *, size_t);
+int f2fs_init_xattr_caches(struct f2fs_sb_info *);
+void f2fs_destroy_xattr_caches(struct f2fs_sb_info *);
 #else
 
 #define f2fs_xattr_handlers	NULL
 #define f2fs_listxattr		NULL
 static inline int f2fs_setxattr(struct inode *inode, int index,
 		const char *name, const void *value, size_t size,
-		struct page *page, int flags)
+		struct folio *folio, int flags)
 {
 	return -EOPNOTSUPP;
 }
@@ -155,11 +155,11 @@ static inline void f2fs_destroy_xattr_caches(struct f2fs_sb_info *sbi) { }
 #endif
 
 #ifdef CONFIG_F2FS_FS_SECURITY
-extern int f2fs_init_security(struct inode *, struct inode *,
-				const struct qstr *, struct page *);
+int f2fs_init_security(struct inode *, struct inode *,
+				const struct qstr *, struct folio *);
 #else
 static inline int f2fs_init_security(struct inode *inode, struct inode *dir,
-				const struct qstr *qstr, struct page *ipage)
+				const struct qstr *qstr, struct folio *ifolio)
 {
 	return 0;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 110/153] f2fs: Pass a folio to __f2fs_setxattr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (108 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 109/153] f2fs: Pass a folio to f2fs_setxattr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 111/153] f2fs: Pass a folio to write_all_xattrs() Matthew Wilcox (Oracle)
                   ` (44 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Also pass the folio into read_all_xattrs().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/xattr.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index 10f4f82bdbde..9dd0d90355f7 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -385,7 +385,7 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
 	return err;
 }
 
-static int read_all_xattrs(struct inode *inode, struct page *ipage,
+static int read_all_xattrs(struct inode *inode, struct folio *ifolio,
 							void **base_addr)
 {
 	struct f2fs_xattr_header *header;
@@ -402,7 +402,7 @@ static int read_all_xattrs(struct inode *inode, struct page *ipage,
 
 	/* read from inline xattr */
 	if (inline_size) {
-		err = read_inline_xattr(inode, ipage, txattr_addr);
+		err = read_inline_xattr(inode, &ifolio->page, txattr_addr);
 		if (err)
 			goto fail;
 	}
@@ -627,7 +627,7 @@ static bool f2fs_xattr_value_same(struct f2fs_xattr_entry *entry,
 
 static int __f2fs_setxattr(struct inode *inode, int index,
 			const char *name, const void *value, size_t size,
-			struct page *ipage, int flags)
+			struct folio *ifolio, int flags)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct f2fs_xattr_entry *here, *last;
@@ -651,7 +651,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
 	if (size > MAX_VALUE_LEN(inode))
 		return -E2BIG;
 retry:
-	error = read_all_xattrs(inode, ipage, &base_addr);
+	error = read_all_xattrs(inode, ifolio, &base_addr);
 	if (error)
 		return error;
 
@@ -766,7 +766,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
 		*(u32 *)((u8 *)last + newsize) = 0;
 	}
 
-	error = write_all_xattrs(inode, new_hsize, base_addr, ipage);
+	error = write_all_xattrs(inode, new_hsize, base_addr, &ifolio->page);
 	if (error)
 		goto exit;
 
@@ -817,7 +817,7 @@ int f2fs_setxattr(struct inode *inode, int index, const char *name,
 	/* this case is only from f2fs_init_inode_metadata */
 	if (ifolio)
 		return __f2fs_setxattr(inode, index, name, value,
-						size, &ifolio->page, flags);
+						size, ifolio, flags);
 	f2fs_balance_fs(sbi, true);
 
 	f2fs_lock_op(sbi);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 111/153] f2fs: Pass a folio to write_all_xattrs()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (109 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 110/153] f2fs: Pass a folio to __f2fs_setxattr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 112/153] f2fs: Use a folio in read_inline_xattr() Matthew Wilcox (Oracle)
                   ` (43 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Also convert in_page to in_folio.  Save five hidden calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/xattr.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index 9dd0d90355f7..43f363f0658b 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -429,11 +429,11 @@ static int read_all_xattrs(struct inode *inode, struct folio *ifolio,
 }
 
 static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
-				void *txattr_addr, struct page *ipage)
+				void *txattr_addr, struct folio *ifolio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	size_t inline_size = inline_xattr_size(inode);
-	struct page *in_page = NULL;
+	struct folio *in_folio = NULL;
 	void *xattr_addr;
 	void *inline_addr = NULL;
 	struct folio *xfolio;
@@ -446,29 +446,29 @@ static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
 
 	/* write to inline xattr */
 	if (inline_size) {
-		if (ipage) {
-			inline_addr = inline_xattr_addr(inode, ipage);
+		if (ifolio) {
+			inline_addr = inline_xattr_addr(inode, &ifolio->page);
 		} else {
-			in_page = f2fs_get_inode_page(sbi, inode->i_ino);
-			if (IS_ERR(in_page)) {
+			in_folio = f2fs_get_inode_folio(sbi, inode->i_ino);
+			if (IS_ERR(in_folio)) {
 				f2fs_alloc_nid_failed(sbi, new_nid);
-				return PTR_ERR(in_page);
+				return PTR_ERR(in_folio);
 			}
-			inline_addr = inline_xattr_addr(inode, in_page);
+			inline_addr = inline_xattr_addr(inode, &in_folio->page);
 		}
 
-		f2fs_wait_on_page_writeback(ipage ? ipage : in_page,
+		f2fs_folio_wait_writeback(ifolio ? ifolio : in_folio,
 							NODE, true, true);
 		/* no need to use xattr node block */
 		if (hsize <= inline_size) {
 			err = f2fs_truncate_xattr_node(inode);
 			f2fs_alloc_nid_failed(sbi, new_nid);
 			if (err) {
-				f2fs_put_page(in_page, 1);
+				f2fs_folio_put(in_folio, true);
 				return err;
 			}
 			memcpy(inline_addr, txattr_addr, inline_size);
-			set_page_dirty(ipage ? ipage : in_page);
+			folio_mark_dirty(ifolio ? ifolio : in_folio);
 			goto in_page_out;
 		}
 	}
@@ -502,12 +502,12 @@ static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
 	memcpy(xattr_addr, txattr_addr + inline_size, VALID_XATTR_BLOCK_SIZE);
 
 	if (inline_size)
-		set_page_dirty(ipage ? ipage : in_page);
+		folio_mark_dirty(ifolio ? ifolio : in_folio);
 	folio_mark_dirty(xfolio);
 
 	f2fs_folio_put(xfolio, true);
 in_page_out:
-	f2fs_put_page(in_page, 1);
+	f2fs_folio_put(in_folio, true);
 	return err;
 }
 
@@ -766,7 +766,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
 		*(u32 *)((u8 *)last + newsize) = 0;
 	}
 
-	error = write_all_xattrs(inode, new_hsize, base_addr, &ifolio->page);
+	error = write_all_xattrs(inode, new_hsize, base_addr, ifolio);
 	if (error)
 		goto exit;
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 112/153] f2fs: Use a folio in read_inline_xattr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (110 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 111/153] f2fs: Pass a folio to write_all_xattrs() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 113/153] f2fs: Use a folio in f2fs_recover_inline_xattr() Matthew Wilcox (Oracle)
                   ` (42 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a hidden call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/xattr.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index 43f363f0658b..28b32728a113 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -276,20 +276,20 @@ static int read_inline_xattr(struct inode *inode, struct page *ipage,
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	unsigned int inline_size = inline_xattr_size(inode);
-	struct page *page = NULL;
+	struct folio *folio = NULL;
 	void *inline_addr;
 
 	if (ipage) {
 		inline_addr = inline_xattr_addr(inode, ipage);
 	} else {
-		page = f2fs_get_inode_page(sbi, inode->i_ino);
-		if (IS_ERR(page))
-			return PTR_ERR(page);
+		folio = f2fs_get_inode_folio(sbi, inode->i_ino);
+		if (IS_ERR(folio))
+			return PTR_ERR(folio);
 
-		inline_addr = inline_xattr_addr(inode, page);
+		inline_addr = inline_xattr_addr(inode, &folio->page);
 	}
 	memcpy(txattr_addr, inline_addr, inline_size);
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 
 	return 0;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 113/153] f2fs: Use a folio in f2fs_recover_inline_xattr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (111 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 112/153] f2fs: Use a folio in read_inline_xattr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 114/153] f2fs: Remove f2fs_get_inode_page() Matthew Wilcox (Oracle)
                   ` (41 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a hidden call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 2db41552ae76..b451374c255a 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2724,12 +2724,12 @@ int f2fs_recover_inline_xattr(struct inode *inode, struct page *page)
 {
 	void *src_addr, *dst_addr;
 	size_t inline_size;
-	struct page *ipage;
+	struct folio *ifolio;
 	struct f2fs_inode *ri;
 
-	ipage = f2fs_get_inode_page(F2FS_I_SB(inode), inode->i_ino);
-	if (IS_ERR(ipage))
-		return PTR_ERR(ipage);
+	ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino);
+	if (IS_ERR(ifolio))
+		return PTR_ERR(ifolio);
 
 	ri = F2FS_INODE(page);
 	if (ri->i_inline & F2FS_INLINE_XATTR) {
@@ -2745,15 +2745,15 @@ int f2fs_recover_inline_xattr(struct inode *inode, struct page *page)
 		goto update_inode;
 	}
 
-	dst_addr = inline_xattr_addr(inode, ipage);
+	dst_addr = inline_xattr_addr(inode, &ifolio->page);
 	src_addr = inline_xattr_addr(inode, page);
 	inline_size = inline_xattr_size(inode);
 
-	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
+	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 	memcpy(dst_addr, src_addr, inline_size);
 update_inode:
-	f2fs_update_inode(inode, ipage);
-	f2fs_put_page(ipage, 1);
+	f2fs_update_inode(inode, &ifolio->page);
+	f2fs_folio_put(ifolio, true);
 	return 0;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 114/153] f2fs: Remove f2fs_get_inode_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (112 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 113/153] f2fs: Use a folio in f2fs_recover_inline_xattr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 115/153] f2fs: Pass a folio to f2fs_getxattr() Matthew Wilcox (Oracle)
                   ` (40 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have now been converted to call f2fs_get_inode_folio().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 1 -
 fs/f2fs/node.c | 7 -------
 2 files changed, 8 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index cf61763e2209..0fe764c30eac 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3731,7 +3731,6 @@ struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs);
 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
 struct folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
-struct page *f2fs_get_inode_page(struct f2fs_sb_info *sbi, pgoff_t ino);
 struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid);
 int f2fs_move_node_folio(struct folio *node_folio, int gc_type);
 void f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index b451374c255a..5ee60b6ad93b 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1547,13 +1547,6 @@ struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino)
 	return __get_node_folio(sbi, ino, NULL, 0, NODE_TYPE_INODE);
 }
 
-struct page *f2fs_get_inode_page(struct f2fs_sb_info *sbi, pgoff_t ino)
-{
-	struct folio *folio = f2fs_get_inode_folio(sbi, ino);
-
-	return &folio->page;
-}
-
 struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid)
 {
 	return __get_node_folio(sbi, xnid, NULL, 0, NODE_TYPE_XATTR);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 115/153] f2fs: Pass a folio to f2fs_getxattr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (113 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 114/153] f2fs: Remove f2fs_get_inode_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 116/153] f2fs: Pass a folio to read_inline_xattr() Matthew Wilcox (Oracle)
                   ` (39 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The one caller of __f2fs_get_acl() which passes a non-NULL page already
has a folio, so pass it in, then into f2fs_getxattr(), which lets us
pass it to lookup_all_xattrs().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/acl.c   |  8 ++++----
 fs/f2fs/xattr.c | 12 ++++++------
 fs/f2fs/xattr.h |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c
index 0a4d160235e0..d4d7f329d23f 100644
--- a/fs/f2fs/acl.c
+++ b/fs/f2fs/acl.c
@@ -166,7 +166,7 @@ static void *f2fs_acl_to_disk(struct f2fs_sb_info *sbi,
 }
 
 static struct posix_acl *__f2fs_get_acl(struct inode *inode, int type,
-						struct page *dpage)
+						struct folio *dfolio)
 {
 	int name_index = F2FS_XATTR_INDEX_POSIX_ACL_DEFAULT;
 	void *value = NULL;
@@ -176,13 +176,13 @@ static struct posix_acl *__f2fs_get_acl(struct inode *inode, int type,
 	if (type == ACL_TYPE_ACCESS)
 		name_index = F2FS_XATTR_INDEX_POSIX_ACL_ACCESS;
 
-	retval = f2fs_getxattr(inode, name_index, "", NULL, 0, dpage);
+	retval = f2fs_getxattr(inode, name_index, "", NULL, 0, dfolio);
 	if (retval > 0) {
 		value = f2fs_kmalloc(F2FS_I_SB(inode), retval, GFP_F2FS_ZERO);
 		if (!value)
 			return ERR_PTR(-ENOMEM);
 		retval = f2fs_getxattr(inode, name_index, "", value,
-							retval, dpage);
+							retval, dfolio);
 	}
 
 	if (retval > 0)
@@ -371,7 +371,7 @@ static int f2fs_acl_create(struct inode *dir, umode_t *mode,
 	if (S_ISLNK(*mode) || !IS_POSIXACL(dir))
 		return 0;
 
-	p = __f2fs_get_acl(dir, ACL_TYPE_DEFAULT, &dfolio->page);
+	p = __f2fs_get_acl(dir, ACL_TYPE_DEFAULT, dfolio);
 	if (!p || p == ERR_PTR(-EOPNOTSUPP)) {
 		*mode &= ~current_umask();
 		return 0;
diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index 28b32728a113..ff49bcba96f3 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -314,7 +314,7 @@ static int read_xattr_block(struct inode *inode, void *txattr_addr)
 	return 0;
 }
 
-static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
+static int lookup_all_xattrs(struct inode *inode, struct folio *ifolio,
 				unsigned int index, unsigned int len,
 				const char *name, struct f2fs_xattr_entry **xe,
 				void **base_addr, int *base_size,
@@ -338,7 +338,7 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
 
 	/* read from inline xattr */
 	if (inline_size) {
-		err = read_inline_xattr(inode, ipage, txattr_addr);
+		err = read_inline_xattr(inode, &ifolio->page, txattr_addr);
 		if (err)
 			goto out;
 
@@ -512,7 +512,7 @@ static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
 }
 
 int f2fs_getxattr(struct inode *inode, int index, const char *name,
-		void *buffer, size_t buffer_size, struct page *ipage)
+		void *buffer, size_t buffer_size, struct folio *ifolio)
 {
 	struct f2fs_xattr_entry *entry = NULL;
 	int error;
@@ -528,11 +528,11 @@ int f2fs_getxattr(struct inode *inode, int index, const char *name,
 	if (len > F2FS_NAME_LEN)
 		return -ERANGE;
 
-	if (!ipage)
+	if (!ifolio)
 		f2fs_down_read(&F2FS_I(inode)->i_xattr_sem);
-	error = lookup_all_xattrs(inode, ipage, index, len, name,
+	error = lookup_all_xattrs(inode, ifolio, index, len, name,
 				&entry, &base_addr, &base_size, &is_inline);
-	if (!ipage)
+	if (!ifolio)
 		f2fs_up_read(&F2FS_I(inode)->i_xattr_sem);
 	if (error)
 		return error;
diff --git a/fs/f2fs/xattr.h b/fs/f2fs/xattr.h
index e0f7b865c116..4fc0b2305fbd 100644
--- a/fs/f2fs/xattr.h
+++ b/fs/f2fs/xattr.h
@@ -130,7 +130,7 @@ extern const struct xattr_handler * const f2fs_xattr_handlers[];
 int f2fs_setxattr(struct inode *, int, const char *, const void *,
 		size_t, struct folio *, int);
 int f2fs_getxattr(struct inode *, int, const char *, void *,
-		size_t, struct page *);
+		size_t, struct folio *);
 ssize_t f2fs_listxattr(struct dentry *, char *, size_t);
 int f2fs_init_xattr_caches(struct f2fs_sb_info *);
 void f2fs_destroy_xattr_caches(struct f2fs_sb_info *);
@@ -146,7 +146,7 @@ static inline int f2fs_setxattr(struct inode *inode, int index,
 }
 static inline int f2fs_getxattr(struct inode *inode, int index,
 			const char *name, void *buffer,
-			size_t buffer_size, struct page *dpage)
+			size_t buffer_size, struct folio *dfolio)
 {
 	return -EOPNOTSUPP;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 116/153] f2fs: Pass a folio to read_inline_xattr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (114 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 115/153] f2fs: Pass a folio to f2fs_getxattr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 117/153] f2fs: Pass a folio to do_recover_data() Matthew Wilcox (Oracle)
                   ` (38 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Both callers have a folio, so pass it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/xattr.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index ff49bcba96f3..c07b3d7c45fa 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -271,7 +271,7 @@ static struct f2fs_xattr_entry *__find_inline_xattr(struct inode *inode,
 	return entry;
 }
 
-static int read_inline_xattr(struct inode *inode, struct page *ipage,
+static int read_inline_xattr(struct inode *inode, struct folio *ifolio,
 							void *txattr_addr)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
@@ -279,8 +279,8 @@ static int read_inline_xattr(struct inode *inode, struct page *ipage,
 	struct folio *folio = NULL;
 	void *inline_addr;
 
-	if (ipage) {
-		inline_addr = inline_xattr_addr(inode, ipage);
+	if (ifolio) {
+		inline_addr = inline_xattr_addr(inode, &ifolio->page);
 	} else {
 		folio = f2fs_get_inode_folio(sbi, inode->i_ino);
 		if (IS_ERR(folio))
@@ -338,7 +338,7 @@ static int lookup_all_xattrs(struct inode *inode, struct folio *ifolio,
 
 	/* read from inline xattr */
 	if (inline_size) {
-		err = read_inline_xattr(inode, &ifolio->page, txattr_addr);
+		err = read_inline_xattr(inode, ifolio, txattr_addr);
 		if (err)
 			goto out;
 
@@ -402,7 +402,7 @@ static int read_all_xattrs(struct inode *inode, struct folio *ifolio,
 
 	/* read from inline xattr */
 	if (inline_size) {
-		err = read_inline_xattr(inode, &ifolio->page, txattr_addr);
+		err = read_inline_xattr(inode, ifolio, txattr_addr);
 		if (err)
 			goto fail;
 	}
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 117/153] f2fs: Pass a folio to do_recover_data()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (115 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 116/153] f2fs: Pass a folio to read_inline_xattr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 118/153] f2fs: Pass a folio to f2fs_recover_inline_xattr() Matthew Wilcox (Oracle)
                   ` (37 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Push the page conversion into do_recover_data().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/recovery.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index dd69ff5b7661..8f8a6b2331a6 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -620,7 +620,7 @@ static int f2fs_reserve_new_block_retry(struct dnode_of_data *dn)
 }
 
 static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
-					struct page *page)
+					struct folio *folio)
 {
 	struct dnode_of_data dn;
 	struct node_info ni;
@@ -628,19 +628,19 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 	int err = 0, recovered = 0;
 
 	/* step 1: recover xattr */
-	if (IS_INODE(page)) {
-		err = f2fs_recover_inline_xattr(inode, page);
+	if (IS_INODE(&folio->page)) {
+		err = f2fs_recover_inline_xattr(inode, &folio->page);
 		if (err)
 			goto out;
-	} else if (f2fs_has_xattr_block(ofs_of_node(page))) {
-		err = f2fs_recover_xattr_data(inode, page);
+	} else if (f2fs_has_xattr_block(ofs_of_node(&folio->page))) {
+		err = f2fs_recover_xattr_data(inode, &folio->page);
 		if (!err)
 			recovered++;
 		goto out;
 	}
 
 	/* step 2: recover inline data */
-	err = f2fs_recover_inline_data(inode, page);
+	err = f2fs_recover_inline_data(inode, &folio->page);
 	if (err) {
 		if (err == 1)
 			err = 0;
@@ -648,8 +648,8 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 	}
 
 	/* step 3: recover data indices */
-	start = f2fs_start_bidx_of_node(ofs_of_node(page), inode);
-	end = start + ADDRS_PER_PAGE(page, inode);
+	start = f2fs_start_bidx_of_node(ofs_of_node(&folio->page), inode);
+	end = start + ADDRS_PER_PAGE(&folio->page, inode);
 
 	set_new_dnode(&dn, inode, NULL, NULL, 0);
 retry_dn:
@@ -668,12 +668,12 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 	if (err)
 		goto err;
 
-	f2fs_bug_on(sbi, ni.ino != ino_of_node(page));
+	f2fs_bug_on(sbi, ni.ino != ino_of_node(&folio->page));
 
-	if (ofs_of_node(dn.node_page) != ofs_of_node(page)) {
+	if (ofs_of_node(dn.node_page) != ofs_of_node(&folio->page)) {
 		f2fs_warn(sbi, "Inconsistent ofs_of_node, ino:%lu, ofs:%u, %u",
 			  inode->i_ino, ofs_of_node(dn.node_page),
-			  ofs_of_node(page));
+			  ofs_of_node(&folio->page));
 		err = -EFSCORRUPTED;
 		f2fs_handle_error(sbi, ERROR_INCONSISTENT_FOOTER);
 		goto err;
@@ -683,7 +683,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 		block_t src, dest;
 
 		src = f2fs_data_blkaddr(&dn);
-		dest = data_blkaddr(dn.inode, page, dn.ofs_in_node);
+		dest = data_blkaddr(dn.inode, &folio->page, dn.ofs_in_node);
 
 		if (__is_valid_data_blkaddr(src) &&
 			!f2fs_is_valid_blkaddr(sbi, src, META_POR)) {
@@ -758,9 +758,9 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 		}
 	}
 
-	copy_node_footer(dn.node_page, page);
+	copy_node_footer(dn.node_page, &folio->page);
 	fill_node_footer(dn.node_page, dn.nid, ni.ino,
-					ofs_of_node(page), false);
+					ofs_of_node(&folio->page), false);
 	set_page_dirty(dn.node_page);
 err:
 	f2fs_put_dnode(&dn);
@@ -823,7 +823,7 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 				break;
 			}
 		}
-		err = do_recover_data(sbi, entry->inode, &folio->page);
+		err = do_recover_data(sbi, entry->inode, folio);
 		if (err) {
 			f2fs_folio_put(folio, true);
 			break;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 118/153] f2fs: Pass a folio to f2fs_recover_inline_xattr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (116 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 117/153] f2fs: Pass a folio to do_recover_data() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 119/153] f2fs: Pass a folio to inline_xattr_addr() Matthew Wilcox (Oracle)
                   ` (36 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The caller has a folio, so pass it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h     | 2 +-
 fs/f2fs/node.c     | 6 +++---
 fs/f2fs/recovery.c | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 0fe764c30eac..8e700621ee9d 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3745,7 +3745,7 @@ bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid);
 void f2fs_alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid);
 void f2fs_alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid);
 int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink);
-int f2fs_recover_inline_xattr(struct inode *inode, struct page *page);
+int f2fs_recover_inline_xattr(struct inode *inode, struct folio *folio);
 int f2fs_recover_xattr_data(struct inode *inode, struct page *page);
 int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page);
 int f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 5ee60b6ad93b..8a4466d99589 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2713,7 +2713,7 @@ int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink)
 	return nr - nr_shrink;
 }
 
-int f2fs_recover_inline_xattr(struct inode *inode, struct page *page)
+int f2fs_recover_inline_xattr(struct inode *inode, struct folio *folio)
 {
 	void *src_addr, *dst_addr;
 	size_t inline_size;
@@ -2724,7 +2724,7 @@ int f2fs_recover_inline_xattr(struct inode *inode, struct page *page)
 	if (IS_ERR(ifolio))
 		return PTR_ERR(ifolio);
 
-	ri = F2FS_INODE(page);
+	ri = F2FS_INODE(&folio->page);
 	if (ri->i_inline & F2FS_INLINE_XATTR) {
 		if (!f2fs_has_inline_xattr(inode)) {
 			set_inode_flag(inode, FI_INLINE_XATTR);
@@ -2739,7 +2739,7 @@ int f2fs_recover_inline_xattr(struct inode *inode, struct page *page)
 	}
 
 	dst_addr = inline_xattr_addr(inode, &ifolio->page);
-	src_addr = inline_xattr_addr(inode, page);
+	src_addr = inline_xattr_addr(inode, &folio->page);
 	inline_size = inline_xattr_size(inode);
 
 	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 8f8a6b2331a6..ac8f2d0763a4 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -629,7 +629,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 
 	/* step 1: recover xattr */
 	if (IS_INODE(&folio->page)) {
-		err = f2fs_recover_inline_xattr(inode, &folio->page);
+		err = f2fs_recover_inline_xattr(inode, folio);
 		if (err)
 			goto out;
 	} else if (f2fs_has_xattr_block(ofs_of_node(&folio->page))) {
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 119/153] f2fs: Pass a folio to inline_xattr_addr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (117 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 118/153] f2fs: Pass a folio to f2fs_recover_inline_xattr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 120/153] f2fs: Pass a folio to init_dent_inode() Matthew Wilcox (Oracle)
                   ` (35 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers now have a folio, so pass it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h  | 4 ++--
 fs/f2fs/node.c  | 4 ++--
 fs/f2fs/xattr.c | 8 ++++----
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 8e700621ee9d..60381c3c3d9b 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3334,9 +3334,9 @@ static inline unsigned int addrs_per_page(struct inode *inode,
 	return addrs;
 }
 
-static inline void *inline_xattr_addr(struct inode *inode, struct page *page)
+static inline void *inline_xattr_addr(struct inode *inode, struct folio *folio)
 {
-	struct f2fs_inode *ri = F2FS_INODE(page);
+	struct f2fs_inode *ri = F2FS_INODE(&folio->page);
 
 	return (void *)&(ri->i_addr[DEF_ADDRS_PER_INODE -
 					get_inline_xattr_addrs(inode)]);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 8a4466d99589..e9e33241e762 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2738,8 +2738,8 @@ int f2fs_recover_inline_xattr(struct inode *inode, struct folio *folio)
 		goto update_inode;
 	}
 
-	dst_addr = inline_xattr_addr(inode, &ifolio->page);
-	src_addr = inline_xattr_addr(inode, &folio->page);
+	dst_addr = inline_xattr_addr(inode, ifolio);
+	src_addr = inline_xattr_addr(inode, folio);
 	inline_size = inline_xattr_size(inode);
 
 	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index c07b3d7c45fa..58632a2b6613 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -280,13 +280,13 @@ static int read_inline_xattr(struct inode *inode, struct folio *ifolio,
 	void *inline_addr;
 
 	if (ifolio) {
-		inline_addr = inline_xattr_addr(inode, &ifolio->page);
+		inline_addr = inline_xattr_addr(inode, ifolio);
 	} else {
 		folio = f2fs_get_inode_folio(sbi, inode->i_ino);
 		if (IS_ERR(folio))
 			return PTR_ERR(folio);
 
-		inline_addr = inline_xattr_addr(inode, &folio->page);
+		inline_addr = inline_xattr_addr(inode, folio);
 	}
 	memcpy(txattr_addr, inline_addr, inline_size);
 	f2fs_folio_put(folio, true);
@@ -447,14 +447,14 @@ static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
 	/* write to inline xattr */
 	if (inline_size) {
 		if (ifolio) {
-			inline_addr = inline_xattr_addr(inode, &ifolio->page);
+			inline_addr = inline_xattr_addr(inode, ifolio);
 		} else {
 			in_folio = f2fs_get_inode_folio(sbi, inode->i_ino);
 			if (IS_ERR(in_folio)) {
 				f2fs_alloc_nid_failed(sbi, new_nid);
 				return PTR_ERR(in_folio);
 			}
-			inline_addr = inline_xattr_addr(inode, &in_folio->page);
+			inline_addr = inline_xattr_addr(inode, in_folio);
 		}
 
 		f2fs_folio_wait_writeback(ifolio ? ifolio : in_folio,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 120/153] f2fs: Pass a folio to init_dent_inode()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (118 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 119/153] f2fs: Pass a folio to inline_xattr_addr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 121/153] f2fs: Pass a folio to f2fs_make_empty_inline_dir() Matthew Wilcox (Oracle)
                   ` (34 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller has a folio, so pass it in.  Removes two hidden calls
to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 4decec1800bf..85e42df34c99 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -443,17 +443,17 @@ void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
 
 static void init_dent_inode(struct inode *dir, struct inode *inode,
 			    const struct f2fs_filename *fname,
-			    struct page *ipage)
+			    struct folio *ifolio)
 {
 	struct f2fs_inode *ri;
 
 	if (!fname) /* tmpfile case? */
 		return;
 
-	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
+	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 
-	/* copy name info. to this inode page */
-	ri = F2FS_INODE(ipage);
+	/* copy name info. to this inode folio */
+	ri = F2FS_INODE(&ifolio->page);
 	ri->i_namelen = cpu_to_le32(fname->disk_name.len);
 	memcpy(ri->i_name, fname->disk_name.name, fname->disk_name.len);
 	if (IS_ENCRYPTED(dir)) {
@@ -474,7 +474,7 @@ static void init_dent_inode(struct inode *dir, struct inode *inode,
 				file_lost_pino(inode);
 		}
 	}
-	set_page_dirty(ipage);
+	folio_mark_dirty(ifolio);
 }
 
 void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
@@ -557,7 +557,7 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 			return &folio->page;
 	}
 
-	init_dent_inode(dir, inode, fname, &folio->page);
+	init_dent_inode(dir, inode, fname, folio);
 
 	/*
 	 * This file should be checkpointed during fsync.
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 121/153] f2fs: Pass a folio to f2fs_make_empty_inline_dir()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (119 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 120/153] f2fs: Pass a folio to init_dent_inode() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 122/153] f2fs: Pass a folio to f2fs_has_enough_room() Matthew Wilcox (Oracle)
                   ` (33 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller already has a folio, so pass it in.  Removes a
hidden call to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c    | 2 +-
 fs/f2fs/f2fs.h   | 2 +-
 fs/f2fs/inline.c | 6 +++---
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 85e42df34c99..5c02d55563e3 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -498,7 +498,7 @@ static int make_empty_dir(struct inode *inode,
 	struct f2fs_dentry_ptr d;
 
 	if (f2fs_has_inline_dentry(inode))
-		return f2fs_make_empty_inline_dir(inode, parent, &folio->page);
+		return f2fs_make_empty_inline_dir(inode, parent, folio);
 
 	dentry_folio = f2fs_get_new_data_folio(inode, folio, 0, true);
 	if (IS_ERR(dentry_folio))
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 60381c3c3d9b..2fc95b671b10 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4287,7 +4287,7 @@ struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
 					struct page **res_page,
 					bool use_hash);
 int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
-			struct page *ipage);
+			struct folio *ifolio);
 int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 			struct inode *inode, nid_t ino, umode_t mode);
 void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry,
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 81a6ab05363e..d27205a789af 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -385,17 +385,17 @@ struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
 }
 
 int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
-							struct page *ipage)
+							struct folio *ifolio)
 {
 	struct f2fs_dentry_ptr d;
 	void *inline_dentry;
 
-	inline_dentry = inline_data_addr(inode, ipage);
+	inline_dentry = inline_data_addr(inode, &ifolio->page);
 
 	make_dentry_ptr_inline(inode, &d, inline_dentry);
 	f2fs_do_make_empty_dir(inode, parent, &d);
 
-	set_page_dirty(ipage);
+	folio_mark_dirty(ifolio);
 
 	/* update i_size to MAX_INLINE_DATA */
 	if (i_size_read(inode) < MAX_INLINE_DATA(inode))
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 122/153] f2fs: Pass a folio to f2fs_has_enough_room()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (120 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 121/153] f2fs: Pass a folio to f2fs_make_empty_inline_dir() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 123/153] f2fs: Convert dnode_of_data->inode_page to inode_folio Matthew Wilcox (Oracle)
                   ` (32 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller already has a folio so pass it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c    | 4 ++--
 fs/f2fs/f2fs.h   | 2 +-
 fs/f2fs/inline.c | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 5c02d55563e3..aa3c18a39cd7 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -621,14 +621,14 @@ int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots)
 	goto next;
 }
 
-bool f2fs_has_enough_room(struct inode *dir, struct page *ipage,
+bool f2fs_has_enough_room(struct inode *dir, struct folio *ifolio,
 			  const struct f2fs_filename *fname)
 {
 	struct f2fs_dentry_ptr d;
 	unsigned int bit_pos;
 	int slots = GET_DENTRY_SLOTS(fname->disk_name.len);
 
-	make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, ipage));
+	make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, &ifolio->page));
 
 	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
 
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 2fc95b671b10..9f4a041b2d7e 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3654,7 +3654,7 @@ ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
 			struct page **page);
 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
 			struct page *page, struct inode *inode);
-bool f2fs_has_enough_room(struct inode *dir, struct page *ipage,
+bool f2fs_has_enough_room(struct inode *dir, struct folio *ifolio,
 			  const struct f2fs_filename *fname);
 void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
 			const struct fscrypt_str *name, f2fs_hash_t name_hash,
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index d27205a789af..919d30034fe0 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -615,7 +615,7 @@ int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
 		goto out_fname;
 	}
 
-	if (f2fs_has_enough_room(dir, &ifolio->page, &fname)) {
+	if (f2fs_has_enough_room(dir, ifolio, &fname)) {
 		f2fs_folio_put(ifolio, true);
 		goto out_fname;
 	}
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 123/153] f2fs: Convert dnode_of_data->inode_page to inode_folio
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (121 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 122/153] f2fs: Pass a folio to f2fs_has_enough_room() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 124/153] f2fs: Pass a folio to f2fs_do_read_inline_data() Matthew Wilcox (Oracle)
                   ` (31 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Also rename inode_page_locked to inode_folio_locked.  Removes five
calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c     |  2 +-
 fs/f2fs/f2fs.h     | 12 ++++++------
 fs/f2fs/inline.c   |  6 +++---
 fs/f2fs/node.c     | 14 +++++++-------
 fs/f2fs/recovery.c | 18 +++++++++---------
 5 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index a6c7dc56a0e1..e434f4f5439c 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1190,7 +1190,7 @@ int f2fs_reserve_new_block(struct dnode_of_data *dn)
 
 int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index)
 {
-	bool need_put = dn->inode_page ? false : true;
+	bool need_put = dn->inode_folio ? false : true;
 	int err;
 
 	err = f2fs_get_dnode_of_data(dn, index, ALLOC_NODE);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 9f4a041b2d7e..ede550b9f60d 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -994,11 +994,11 @@ struct f2fs_nm_info {
  */
 struct dnode_of_data {
 	struct inode *inode;		/* vfs inode pointer */
-	struct page *inode_page;	/* its inode page, NULL is possible */
+	struct folio *inode_folio;	/* its inode folio, NULL is possible */
 	struct page *node_page;		/* cached direct node page */
 	nid_t nid;			/* node id of the direct node block */
 	unsigned int ofs_in_node;	/* data offset in the node page */
-	bool inode_page_locked;		/* inode page is locked or not */
+	bool inode_folio_locked;	/* inode folio is locked or not */
 	bool node_changed;		/* is node block changed */
 	char cur_level;			/* level of hole node page */
 	char max_level;			/* level of current page located */
@@ -1010,7 +1010,7 @@ static inline void set_new_dnode(struct dnode_of_data *dn, struct inode *inode,
 {
 	memset(dn, 0, sizeof(*dn));
 	dn->inode = inode;
-	dn->inode_page = &ifolio->page;
+	dn->inode_folio = ifolio;
 	dn->node_page = &nfolio->page;
 	dn->nid = nid;
 }
@@ -2882,10 +2882,10 @@ static inline void f2fs_put_dnode(struct dnode_of_data *dn)
 {
 	if (dn->node_page)
 		f2fs_put_page(dn->node_page, 1);
-	if (dn->inode_page && dn->node_page != dn->inode_page)
-		f2fs_put_page(dn->inode_page, 0);
+	if (dn->inode_folio && dn->node_page != &dn->inode_folio->page)
+		f2fs_folio_put(dn->inode_folio, false);
 	dn->node_page = NULL;
-	dn->inode_page = NULL;
+	dn->inode_folio = NULL;
 }
 
 static inline struct kmem_cache *f2fs_kmem_cache_create(const char *name,
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 919d30034fe0..7a5481006ed3 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -184,7 +184,7 @@ int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio)
 
 	f2fs_bug_on(F2FS_F_SB(folio), folio_test_writeback(folio));
 
-	f2fs_do_read_inline_data(folio, dn->inode_page);
+	f2fs_do_read_inline_data(folio, &dn->inode_folio->page);
 	folio_mark_dirty(folio);
 
 	/* clear dirty state */
@@ -205,8 +205,8 @@ int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio)
 	set_inode_flag(dn->inode, FI_APPEND_WRITE);
 
 	/* clear inline data and flag after data writeback */
-	f2fs_truncate_inline_inode(dn->inode, dn->inode_page, 0);
-	clear_page_private_inline(dn->inode_page);
+	f2fs_truncate_inline_inode(dn->inode, &dn->inode_folio->page, 0);
+	clear_page_private_inline(&dn->inode_folio->page);
 clear_out:
 	stat_dec_inline_inode(dn->inode);
 	clear_inode_flag(dn->inode, FI_INLINE_DATA);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index e9e33241e762..bf583cd2a589 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -778,12 +778,12 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 
 	nids[0] = dn->inode->i_ino;
 
-	if (!dn->inode_page) {
+	if (!dn->inode_folio) {
 		nfolio[0] = f2fs_get_inode_folio(sbi, nids[0]);
 		if (IS_ERR(nfolio[0]))
 			return PTR_ERR(nfolio[0]);
 	} else {
-		nfolio[0] = page_folio(dn->inode_page);
+		nfolio[0] = dn->inode_folio;
 	}
 
 	/* if inline_data is set, should not report any block indices */
@@ -796,8 +796,8 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 	parent = nfolio[0];
 	if (level != 0)
 		nids[1] = get_nid(&parent->page, offset[0], true);
-	dn->inode_page = &nfolio[0]->page;
-	dn->inode_page_locked = true;
+	dn->inode_folio = nfolio[0];
+	dn->inode_folio_locked = true;
 
 	/* get indirect or direct nodes */
 	for (i = 1; i <= level; i++) {
@@ -830,7 +830,7 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 			done = true;
 		}
 		if (i == 1) {
-			dn->inode_page_locked = false;
+			dn->inode_folio_locked = false;
 			folio_unlock(parent);
 		} else {
 			f2fs_folio_put(parent, true);
@@ -888,7 +888,7 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 	if (i > 1)
 		f2fs_folio_put(nfolio[0], false);
 release_out:
-	dn->inode_page = NULL;
+	dn->inode_folio = NULL;
 	dn->node_page = NULL;
 	if (err == -ENOENT) {
 		dn->cur_level = i;
@@ -1070,7 +1070,7 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
 	int i;
 	int idx = depth - 2;
 
-	nid[0] = get_nid(dn->inode_page, offset[0], true);
+	nid[0] = get_nid(&dn->inode_folio->page, offset[0], true);
 	if (!nid[0])
 		return 0;
 
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index ac8f2d0763a4..69d8eaaf9013 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -537,9 +537,9 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 
 	if (dn->inode->i_ino == nid) {
 		tdn.nid = nid;
-		if (!dn->inode_page_locked)
-			lock_page(dn->inode_page);
-		tdn.node_page = dn->inode_page;
+		if (!dn->inode_folio_locked)
+			folio_lock(dn->inode_folio);
+		tdn.node_page = &dn->inode_folio->page;
 		tdn.ofs_in_node = ofs_in_node;
 		goto truncate_out;
 	} else if (dn->nid == nid) {
@@ -580,8 +580,8 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 	 * if inode page is locked, unlock temporarily, but its reference
 	 * count keeps alive.
 	 */
-	if (ino == dn->inode->i_ino && dn->inode_page_locked)
-		unlock_page(dn->inode_page);
+	if (ino == dn->inode->i_ino && dn->inode_folio_locked)
+		folio_unlock(dn->inode_folio);
 
 	set_new_dnode(&tdn, inode, NULL, NULL, 0);
 	if (f2fs_get_dnode_of_data(&tdn, bidx, LOOKUP_NODE))
@@ -594,15 +594,15 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 out:
 	if (ino != dn->inode->i_ino)
 		iput(inode);
-	else if (dn->inode_page_locked)
-		lock_page(dn->inode_page);
+	else if (dn->inode_folio_locked)
+		folio_lock(dn->inode_folio);
 	return 0;
 
 truncate_out:
 	if (f2fs_data_blkaddr(&tdn) == blkaddr)
 		f2fs_truncate_data_blocks_range(&tdn, 1);
-	if (dn->inode->i_ino == nid && !dn->inode_page_locked)
-		unlock_page(dn->inode_page);
+	if (dn->inode->i_ino == nid && !dn->inode_folio_locked)
+		folio_unlock(dn->inode_folio);
 	return 0;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 124/153] f2fs: Pass a folio to f2fs_do_read_inline_data()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (122 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 123/153] f2fs: Convert dnode_of_data->inode_page to inode_folio Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 125/153] f2fs: Pass a folio to f2fs_truncate_inline_inode() Matthew Wilcox (Oracle)
                   ` (30 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers now have a folio, so pass it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c   | 2 +-
 fs/f2fs/f2fs.h   | 2 +-
 fs/f2fs/inline.c | 8 ++++----
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index e434f4f5439c..952b3885a092 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -3389,7 +3389,7 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
 
 	if (f2fs_has_inline_data(inode)) {
 		if (pos + len <= MAX_INLINE_DATA(inode)) {
-			f2fs_do_read_inline_data(folio, &ifolio->page);
+			f2fs_do_read_inline_data(folio, ifolio);
 			set_inode_flag(inode, FI_DATA_EXIST);
 			if (inode->i_nlink)
 				set_page_private_inline(&ifolio->page);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index ede550b9f60d..bb9e4f512242 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4273,7 +4273,7 @@ extern struct kmem_cache *f2fs_inode_entry_slab;
 bool f2fs_may_inline_data(struct inode *inode);
 bool f2fs_sanity_check_inline_data(struct inode *inode, struct page *ipage);
 bool f2fs_may_inline_dentry(struct inode *inode);
-void f2fs_do_read_inline_data(struct folio *folio, struct page *ipage);
+void f2fs_do_read_inline_data(struct folio *folio, struct folio *ifolio);
 void f2fs_truncate_inline_inode(struct inode *inode,
 						struct page *ipage, u64 from);
 int f2fs_read_inline_data(struct inode *inode, struct folio *folio);
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 7a5481006ed3..39b936be6ca8 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -79,7 +79,7 @@ bool f2fs_may_inline_dentry(struct inode *inode)
 	return true;
 }
 
-void f2fs_do_read_inline_data(struct folio *folio, struct page *ipage)
+void f2fs_do_read_inline_data(struct folio *folio, struct folio *ifolio)
 {
 	struct inode *inode = folio->mapping->host;
 
@@ -91,7 +91,7 @@ void f2fs_do_read_inline_data(struct folio *folio, struct page *ipage)
 	folio_zero_segment(folio, MAX_INLINE_DATA(inode), folio_size(folio));
 
 	/* Copy the whole inline data block */
-	memcpy_to_folio(folio, 0, inline_data_addr(inode, ipage),
+	memcpy_to_folio(folio, 0, inline_data_addr(inode, &ifolio->page),
 		       MAX_INLINE_DATA(inode));
 	if (!folio_test_uptodate(folio))
 		folio_mark_uptodate(folio);
@@ -133,7 +133,7 @@ int f2fs_read_inline_data(struct inode *inode, struct folio *folio)
 	if (folio_index(folio))
 		folio_zero_segment(folio, 0, folio_size(folio));
 	else
-		f2fs_do_read_inline_data(folio, &ifolio->page);
+		f2fs_do_read_inline_data(folio, ifolio);
 
 	if (!folio_test_uptodate(folio))
 		folio_mark_uptodate(folio);
@@ -184,7 +184,7 @@ int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio)
 
 	f2fs_bug_on(F2FS_F_SB(folio), folio_test_writeback(folio));
 
-	f2fs_do_read_inline_data(folio, &dn->inode_folio->page);
+	f2fs_do_read_inline_data(folio, dn->inode_folio);
 	folio_mark_dirty(folio);
 
 	/* clear dirty state */
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 125/153] f2fs: Pass a folio to f2fs_truncate_inline_inode()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (123 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 124/153] f2fs: Pass a folio to f2fs_do_read_inline_data() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 126/153] f2fs: Pass a folio to __f2fs_find_entry() Matthew Wilcox (Oracle)
                   ` (29 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers now have a folio, so pass it in.  Removes a call to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h   |  4 ++--
 fs/f2fs/file.c   |  2 +-
 fs/f2fs/inline.c | 18 +++++++++---------
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index bb9e4f512242..5a6910b7d58a 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4274,8 +4274,8 @@ bool f2fs_may_inline_data(struct inode *inode);
 bool f2fs_sanity_check_inline_data(struct inode *inode, struct page *ipage);
 bool f2fs_may_inline_dentry(struct inode *inode);
 void f2fs_do_read_inline_data(struct folio *folio, struct folio *ifolio);
-void f2fs_truncate_inline_inode(struct inode *inode,
-						struct page *ipage, u64 from);
+void f2fs_truncate_inline_inode(struct inode *inode, struct folio *ifolio,
+		u64 from);
 int f2fs_read_inline_data(struct inode *inode, struct folio *folio);
 int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio);
 int f2fs_convert_inline_inode(struct inode *inode);
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 66c743a09756..8f1adaa9f90a 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -781,7 +781,7 @@ int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 	}
 
 	if (f2fs_has_inline_data(inode)) {
-		f2fs_truncate_inline_inode(inode, &ifolio->page, from);
+		f2fs_truncate_inline_inode(inode, ifolio, from);
 		f2fs_folio_put(ifolio, true);
 		truncate_page = true;
 		goto out;
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 39b936be6ca8..bce99af7f4ef 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -97,19 +97,19 @@ void f2fs_do_read_inline_data(struct folio *folio, struct folio *ifolio)
 		folio_mark_uptodate(folio);
 }
 
-void f2fs_truncate_inline_inode(struct inode *inode,
-					struct page *ipage, u64 from)
+void f2fs_truncate_inline_inode(struct inode *inode, struct folio *ifolio,
+		u64 from)
 {
 	void *addr;
 
 	if (from >= MAX_INLINE_DATA(inode))
 		return;
 
-	addr = inline_data_addr(inode, ipage);
+	addr = inline_data_addr(inode, &ifolio->page);
 
-	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
+	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 	memset(addr + from, 0, MAX_INLINE_DATA(inode) - from);
-	set_page_dirty(ipage);
+	folio_mark_dirty(ifolio);
 
 	if (from == 0)
 		clear_inode_flag(inode, FI_DATA_EXIST);
@@ -205,7 +205,7 @@ int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio)
 	set_inode_flag(dn->inode, FI_APPEND_WRITE);
 
 	/* clear inline data and flag after data writeback */
-	f2fs_truncate_inline_inode(dn->inode, &dn->inode_folio->page, 0);
+	f2fs_truncate_inline_inode(dn->inode, dn->inode_folio, 0);
 	clear_page_private_inline(&dn->inode_folio->page);
 clear_out:
 	stat_dec_inline_inode(dn->inode);
@@ -334,7 +334,7 @@ int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
 		struct folio *ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
 		if (IS_ERR(ifolio))
 			return PTR_ERR(ifolio);
-		f2fs_truncate_inline_inode(inode, &ifolio->page, 0);
+		f2fs_truncate_inline_inode(inode, ifolio, 0);
 		stat_dec_inline_inode(inode);
 		clear_inode_flag(inode, FI_INLINE_DATA);
 		f2fs_folio_put(ifolio, true);
@@ -460,7 +460,7 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct folio *ifolio,
 	folio_mark_dirty(folio);
 
 	/* clear inline dir and flag after data writeback */
-	f2fs_truncate_inline_inode(dir, &ifolio->page, 0);
+	f2fs_truncate_inline_inode(dir, ifolio, 0);
 
 	stat_dec_inline_dir(dir);
 	clear_inode_flag(dir, FI_INLINE_DENTRY);
@@ -547,7 +547,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct folio *ifolio,
 	}
 
 	memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA(dir));
-	f2fs_truncate_inline_inode(dir, &ifolio->page, 0);
+	f2fs_truncate_inline_inode(dir, ifolio, 0);
 
 	folio_unlock(ifolio);
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 126/153] f2fs: Pass a folio to __f2fs_find_entry()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (124 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 125/153] f2fs: Pass a folio to f2fs_truncate_inline_inode() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 127/153] f2fs: Pass a folio to f2fs_find_entry() Matthew Wilcox (Oracle)
                   ` (28 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Also pass a folio to f2fs_find_in_inline_dir() and find_in_level().
Remove three calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c      | 32 +++++++++++++++++---------------
 fs/f2fs/f2fs.h     |  8 +++-----
 fs/f2fs/inline.c   |  8 ++++----
 fs/f2fs/namei.c    | 10 +++++-----
 fs/f2fs/recovery.c | 12 ++++++------
 5 files changed, 35 insertions(+), 35 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index aa3c18a39cd7..676a46153247 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -260,7 +260,7 @@ struct f2fs_dir_entry *f2fs_find_target_dentry(const struct f2fs_dentry_ptr *d,
 static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 					unsigned int level,
 					const struct f2fs_filename *fname,
-					struct page **res_page,
+					struct folio **res_folio,
 					bool use_hash)
 {
 	int s = GET_DENTRY_SLOTS(fname->disk_name.len);
@@ -291,18 +291,18 @@ static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 				bidx = next_pgofs;
 				continue;
 			} else {
-				*res_page = &dentry_folio->page;
+				*res_folio = dentry_folio;
 				break;
 			}
 		}
 
 		de = find_in_block(dir, dentry_folio, fname, &max_slots, use_hash);
 		if (IS_ERR(de)) {
-			*res_page = ERR_CAST(de);
+			*res_folio = ERR_CAST(de);
 			de = NULL;
 			break;
 		} else if (de) {
-			*res_page = &dentry_folio->page;
+			*res_folio = dentry_folio;
 			break;
 		}
 
@@ -329,7 +329,7 @@ static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 
 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
 					 const struct f2fs_filename *fname,
-					 struct page **res_page)
+					 struct folio **res_folio)
 {
 	unsigned long npages = dir_blocks(dir);
 	struct f2fs_dir_entry *de = NULL;
@@ -337,13 +337,13 @@ struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
 	unsigned int level;
 	bool use_hash = true;
 
-	*res_page = NULL;
+	*res_folio = NULL;
 
 #if IS_ENABLED(CONFIG_UNICODE)
 start_find_entry:
 #endif
 	if (f2fs_has_inline_dentry(dir)) {
-		de = f2fs_find_in_inline_dir(dir, fname, res_page, use_hash);
+		de = f2fs_find_in_inline_dir(dir, fname, res_folio, use_hash);
 		goto out;
 	}
 
@@ -359,8 +359,8 @@ struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
 	}
 
 	for (level = 0; level < max_depth; level++) {
-		de = find_in_level(dir, level, fname, res_page, use_hash);
-		if (de || IS_ERR(*res_page))
+		de = find_in_level(dir, level, fname, res_folio, use_hash);
+		if (de || IS_ERR(*res_folio))
 			break;
 	}
 
@@ -388,6 +388,7 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 {
 	struct f2fs_dir_entry *de = NULL;
 	struct f2fs_filename fname;
+	struct folio *rfolio;
 	int err;
 
 	err = f2fs_setup_filename(dir, child, 1, &fname);
@@ -399,7 +400,8 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 		return NULL;
 	}
 
-	de = __f2fs_find_entry(dir, &fname, res_page);
+	de = __f2fs_find_entry(dir, &fname, &rfolio);
+	*res_page = &rfolio->page;
 
 	f2fs_free_filename(&fname);
 	return de;
@@ -781,7 +783,7 @@ int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 				struct inode *inode, nid_t ino, umode_t mode)
 {
 	struct f2fs_filename fname;
-	struct page *page = NULL;
+	struct folio *folio = NULL;
 	struct f2fs_dir_entry *de = NULL;
 	int err;
 
@@ -797,14 +799,14 @@ int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 	 * consistency more.
 	 */
 	if (current != F2FS_I(dir)->task) {
-		de = __f2fs_find_entry(dir, &fname, &page);
+		de = __f2fs_find_entry(dir, &fname, &folio);
 		F2FS_I(dir)->task = NULL;
 	}
 	if (de) {
-		f2fs_put_page(page, 0);
+		f2fs_folio_put(folio, false);
 		err = -EEXIST;
-	} else if (IS_ERR(page)) {
-		err = PTR_ERR(page);
+	} else if (IS_ERR(folio)) {
+		err = PTR_ERR(folio);
 	} else {
 		err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
 	}
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 5a6910b7d58a..43e4f44edcc9 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3645,8 +3645,7 @@ void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
 int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots);
 void f2fs_drop_nlink(struct inode *dir, struct inode *inode);
 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
-					 const struct f2fs_filename *fname,
-					 struct page **res_page);
+		const struct f2fs_filename *fname, struct folio **res_folio);
 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 			const struct qstr *child, struct page **res_page);
 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p);
@@ -4283,9 +4282,8 @@ int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry);
 int f2fs_write_inline_data(struct inode *inode, struct folio *folio);
 int f2fs_recover_inline_data(struct inode *inode, struct page *npage);
 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
-					const struct f2fs_filename *fname,
-					struct page **res_page,
-					bool use_hash);
+		const struct f2fs_filename *fname, struct folio **res_folio,
+		bool use_hash);
 int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
 			struct folio *ifolio);
 int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index bce99af7f4ef..c2e97e230cd1 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -352,7 +352,7 @@ int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
 
 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
 					const struct f2fs_filename *fname,
-					struct page **res_page,
+					struct folio **res_folio,
 					bool use_hash)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
@@ -363,7 +363,7 @@ struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
 
 	ifolio = f2fs_get_inode_folio(sbi, dir->i_ino);
 	if (IS_ERR(ifolio)) {
-		*res_page = &ifolio->page;
+		*res_folio = ifolio;
 		return NULL;
 	}
 
@@ -373,11 +373,11 @@ struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
 	de = f2fs_find_target_dentry(&d, fname, NULL, use_hash);
 	folio_unlock(ifolio);
 	if (IS_ERR(de)) {
-		*res_page = ERR_CAST(de);
+		*res_folio = ERR_CAST(de);
 		de = NULL;
 	}
 	if (de)
-		*res_page = &ifolio->page;
+		*res_folio = ifolio;
 	else
 		f2fs_folio_put(ifolio, false);
 
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 8f8b9b843bdf..4a3acb5edfda 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -463,7 +463,7 @@ static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
 {
 	struct inode *inode = NULL;
 	struct f2fs_dir_entry *de;
-	struct page *page;
+	struct folio *folio;
 	struct dentry *new;
 	nid_t ino = -1;
 	int err = 0;
@@ -481,12 +481,12 @@ static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
 		goto out_splice;
 	if (err)
 		goto out;
-	de = __f2fs_find_entry(dir, &fname, &page);
+	de = __f2fs_find_entry(dir, &fname, &folio);
 	f2fs_free_filename(&fname);
 
 	if (!de) {
-		if (IS_ERR(page)) {
-			err = PTR_ERR(page);
+		if (IS_ERR(folio)) {
+			err = PTR_ERR(folio);
 			goto out;
 		}
 		err = -ENOENT;
@@ -494,7 +494,7 @@ static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
 	}
 
 	ino = le32_to_cpu(de->ino);
-	f2fs_put_page(page, 0);
+	f2fs_folio_put(folio, false);
 
 	inode = f2fs_iget(dir->i_sb, ino);
 	if (IS_ERR(inode)) {
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 69d8eaaf9013..849d014023d4 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -165,7 +165,7 @@ static int recover_dentry(struct inode *inode, struct page *ipage,
 	struct f2fs_dir_entry *de;
 	struct f2fs_filename fname;
 	struct qstr usr_fname;
-	struct page *page;
+	struct folio *folio;
 	struct inode *dir, *einode;
 	struct fsync_inode_entry *entry;
 	int err = 0;
@@ -187,7 +187,7 @@ static int recover_dentry(struct inode *inode, struct page *ipage,
 	if (err)
 		goto out;
 retry:
-	de = __f2fs_find_entry(dir, &fname, &page);
+	de = __f2fs_find_entry(dir, &fname, &folio);
 	if (de && inode->i_ino == le32_to_cpu(de->ino))
 		goto out_put;
 
@@ -212,11 +212,11 @@ static int recover_dentry(struct inode *inode, struct page *ipage,
 			iput(einode);
 			goto out_put;
 		}
-		f2fs_delete_entry(de, page, dir, einode);
+		f2fs_delete_entry(de, &folio->page, dir, einode);
 		iput(einode);
 		goto retry;
-	} else if (IS_ERR(page)) {
-		err = PTR_ERR(page);
+	} else if (IS_ERR(folio)) {
+		err = PTR_ERR(folio);
 	} else {
 		err = f2fs_add_dentry(dir, &fname, inode,
 					inode->i_ino, inode->i_mode);
@@ -226,7 +226,7 @@ static int recover_dentry(struct inode *inode, struct page *ipage,
 	goto out;
 
 out_put:
-	f2fs_put_page(page, 0);
+	f2fs_folio_put(folio, false);
 out:
 	if (file_enc_name(inode))
 		name = "<encrypted>";
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 127/153] f2fs: Pass a folio to f2fs_find_entry()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (125 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 126/153] f2fs: Pass a folio to __f2fs_find_entry() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 128/153] f2fs: Pass a folio to f2fs_parent_dir() Matthew Wilcox (Oracle)
                   ` (27 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert all callers to pass in a pointer to a folio instead of a page.
Also convert f2fs_inode_by_name() to take a folio pointer.  Removes
six calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c   | 21 +++++++--------
 fs/f2fs/f2fs.h  |  4 +--
 fs/f2fs/namei.c | 68 ++++++++++++++++++++++++-------------------------
 3 files changed, 47 insertions(+), 46 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 676a46153247..9f958c379e20 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -384,24 +384,22 @@ struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
  * Entry is guaranteed to be valid.
  */
 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
-			const struct qstr *child, struct page **res_page)
+			const struct qstr *child, struct folio **res_folio)
 {
 	struct f2fs_dir_entry *de = NULL;
 	struct f2fs_filename fname;
-	struct folio *rfolio;
 	int err;
 
 	err = f2fs_setup_filename(dir, child, 1, &fname);
 	if (err) {
 		if (err == -ENOENT)
-			*res_page = NULL;
+			*res_folio = NULL;
 		else
-			*res_page = ERR_PTR(err);
+			*res_folio = ERR_PTR(err);
 		return NULL;
 	}
 
-	de = __f2fs_find_entry(dir, &fname, &rfolio);
-	*res_page = &rfolio->page;
+	de = __f2fs_find_entry(dir, &fname, res_folio);
 
 	f2fs_free_filename(&fname);
 	return de;
@@ -409,19 +407,22 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 
 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p)
 {
-	return f2fs_find_entry(dir, &dotdot_name, p);
+	struct folio *folio;
+	struct f2fs_dir_entry *r = f2fs_find_entry(dir, &dotdot_name, &folio);
+	*p = &folio->page;
+	return r;
 }
 
 ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
-							struct page **page)
+							struct folio **folio)
 {
 	ino_t res = 0;
 	struct f2fs_dir_entry *de;
 
-	de = f2fs_find_entry(dir, qstr, page);
+	de = f2fs_find_entry(dir, qstr, folio);
 	if (de) {
 		res = le32_to_cpu(de->ino);
-		f2fs_put_page(*page, 0);
+		f2fs_folio_put(*folio, false);
 	}
 
 	return res;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 43e4f44edcc9..a7a8bae1dabe 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3647,10 +3647,10 @@ void f2fs_drop_nlink(struct inode *dir, struct inode *inode);
 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
 		const struct f2fs_filename *fname, struct folio **res_folio);
 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
-			const struct qstr *child, struct page **res_page);
+			const struct qstr *child, struct folio **res_folio);
 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p);
 ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
-			struct page **page);
+			struct folio **folio);
 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
 			struct page *page, struct inode *inode);
 bool f2fs_has_enough_room(struct inode *dir, struct folio *ifolio,
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 4a3acb5edfda..1a2f9bde1c11 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -447,12 +447,12 @@ static int f2fs_link(struct dentry *old_dentry, struct inode *dir,
 
 struct dentry *f2fs_get_parent(struct dentry *child)
 {
-	struct page *page;
-	unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot_name, &page);
+	struct folio *folio;
+	unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot_name, &folio);
 
 	if (!ino) {
-		if (IS_ERR(page))
-			return ERR_CAST(page);
+		if (IS_ERR(folio))
+			return ERR_CAST(folio);
 		return ERR_PTR(-ENOENT);
 	}
 	return d_obtain_alias(f2fs_iget(child->d_sb, ino));
@@ -545,7 +545,7 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 	struct inode *inode = d_inode(dentry);
 	struct f2fs_dir_entry *de;
-	struct page *page;
+	struct folio *folio;
 	int err;
 
 	trace_f2fs_unlink_enter(dir, dentry);
@@ -562,10 +562,10 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
 	if (err)
 		goto fail;
 
-	de = f2fs_find_entry(dir, &dentry->d_name, &page);
+	de = f2fs_find_entry(dir, &dentry->d_name, &folio);
 	if (!de) {
-		if (IS_ERR(page))
-			err = PTR_ERR(page);
+		if (IS_ERR(folio))
+			err = PTR_ERR(folio);
 		goto fail;
 	}
 
@@ -575,10 +575,10 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
 	err = f2fs_acquire_orphan_inode(sbi);
 	if (err) {
 		f2fs_unlock_op(sbi);
-		f2fs_put_page(page, 0);
+		f2fs_folio_put(folio, false);
 		goto fail;
 	}
-	f2fs_delete_entry(de, page, dir, inode);
+	f2fs_delete_entry(de, &folio->page, dir, inode);
 	f2fs_unlock_op(sbi);
 
 	/* VFS negative dentries are incompatible with Encoding and
@@ -900,7 +900,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 	struct inode *new_inode = d_inode(new_dentry);
 	struct inode *whiteout = NULL;
 	struct page *old_dir_page = NULL;
-	struct page *old_page, *new_page = NULL;
+	struct folio *old_folio, *new_folio = NULL;
 	struct f2fs_dir_entry *old_dir_entry = NULL;
 	struct f2fs_dir_entry *old_entry;
 	struct f2fs_dir_entry *new_entry;
@@ -959,10 +959,10 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 	}
 
 	err = -ENOENT;
-	old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
+	old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_folio);
 	if (!old_entry) {
-		if (IS_ERR(old_page))
-			err = PTR_ERR(old_page);
+		if (IS_ERR(old_folio))
+			err = PTR_ERR(old_folio);
 		goto out;
 	}
 
@@ -983,10 +983,10 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 
 		err = -ENOENT;
 		new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name,
-						&new_page);
+						&new_folio);
 		if (!new_entry) {
-			if (IS_ERR(new_page))
-				err = PTR_ERR(new_page);
+			if (IS_ERR(new_folio))
+				err = PTR_ERR(new_folio);
 			goto out_dir;
 		}
 
@@ -998,8 +998,8 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 		if (err)
 			goto put_out_dir;
 
-		f2fs_set_link(new_dir, new_entry, new_page, old_inode);
-		new_page = NULL;
+		f2fs_set_link(new_dir, new_entry, &new_folio->page, old_inode);
+		new_folio = NULL;
 
 		inode_set_ctime_current(new_inode);
 		f2fs_down_write(&F2FS_I(new_inode)->i_sem);
@@ -1038,8 +1038,8 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 	inode_set_ctime_current(old_inode);
 	f2fs_mark_inode_dirty_sync(old_inode, false);
 
-	f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
-	old_page = NULL;
+	f2fs_delete_entry(old_entry, &old_folio->page, old_dir, NULL);
+	old_folio = NULL;
 
 	if (whiteout) {
 		set_inode_flag(whiteout, FI_INC_LINK);
@@ -1076,12 +1076,12 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 
 put_out_dir:
 	f2fs_unlock_op(sbi);
-	f2fs_put_page(new_page, 0);
+	f2fs_folio_put(new_folio, false);
 out_dir:
 	if (old_dir_entry)
 		f2fs_put_page(old_dir_page, 0);
 out_old:
-	f2fs_put_page(old_page, 0);
+	f2fs_folio_put(old_folio, false);
 out:
 	iput(whiteout);
 	return err;
@@ -1094,7 +1094,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 	struct inode *old_inode = d_inode(old_dentry);
 	struct inode *new_inode = d_inode(new_dentry);
 	struct page *old_dir_page, *new_dir_page;
-	struct page *old_page, *new_page;
+	struct folio *old_folio, *new_folio;
 	struct f2fs_dir_entry *old_dir_entry = NULL, *new_dir_entry = NULL;
 	struct f2fs_dir_entry *old_entry, *new_entry;
 	int old_nlink = 0, new_nlink = 0;
@@ -1122,17 +1122,17 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 		goto out;
 
 	err = -ENOENT;
-	old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
+	old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_folio);
 	if (!old_entry) {
-		if (IS_ERR(old_page))
-			err = PTR_ERR(old_page);
+		if (IS_ERR(old_folio))
+			err = PTR_ERR(old_folio);
 		goto out;
 	}
 
-	new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name, &new_page);
+	new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name, &new_folio);
 	if (!new_entry) {
-		if (IS_ERR(new_page))
-			err = PTR_ERR(new_page);
+		if (IS_ERR(new_folio))
+			err = PTR_ERR(new_folio);
 		goto out_old;
 	}
 
@@ -1187,7 +1187,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 		f2fs_set_link(new_inode, new_dir_entry, new_dir_page, old_dir);
 
 	/* update directory entry info of old dir inode */
-	f2fs_set_link(old_dir, old_entry, old_page, new_inode);
+	f2fs_set_link(old_dir, old_entry, &old_folio->page, new_inode);
 
 	f2fs_down_write(&F2FS_I(old_inode)->i_sem);
 	if (!old_dir_entry)
@@ -1206,7 +1206,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 	f2fs_mark_inode_dirty_sync(old_dir, false);
 
 	/* update directory entry info of new dir inode */
-	f2fs_set_link(new_dir, new_entry, new_page, old_inode);
+	f2fs_set_link(new_dir, new_entry, &new_folio->page, old_inode);
 
 	f2fs_down_write(&F2FS_I(new_inode)->i_sem);
 	if (!new_dir_entry)
@@ -1245,9 +1245,9 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 		f2fs_put_page(old_dir_page, 0);
 	}
 out_new:
-	f2fs_put_page(new_page, 0);
+	f2fs_folio_put(new_folio, false);
 out_old:
-	f2fs_put_page(old_page, 0);
+	f2fs_folio_put(old_folio, false);
 out:
 	return err;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 128/153] f2fs: Pass a folio to f2fs_parent_dir()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (126 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 127/153] f2fs: Pass a folio to f2fs_find_entry() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 129/153] f2fs: Pass a folio to f2fs_delete_entry() Matthew Wilcox (Oracle)
                   ` (26 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert all the callers to pass a folio.  Removes three calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c   |  7 ++-----
 fs/f2fs/f2fs.h  |  2 +-
 fs/f2fs/namei.c | 34 +++++++++++++++++-----------------
 3 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 9f958c379e20..987b3a00d29d 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -405,12 +405,9 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 	return de;
 }
 
-struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p)
+struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct folio **f)
 {
-	struct folio *folio;
-	struct f2fs_dir_entry *r = f2fs_find_entry(dir, &dotdot_name, &folio);
-	*p = &folio->page;
-	return r;
+	return f2fs_find_entry(dir, &dotdot_name, f);
 }
 
 ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index a7a8bae1dabe..66b363dd40ba 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3648,7 +3648,7 @@ struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
 		const struct f2fs_filename *fname, struct folio **res_folio);
 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 			const struct qstr *child, struct folio **res_folio);
-struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p);
+struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct folio **f);
 ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
 			struct folio **folio);
 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 1a2f9bde1c11..689fd9419afd 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -899,7 +899,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 	struct inode *old_inode = d_inode(old_dentry);
 	struct inode *new_inode = d_inode(new_dentry);
 	struct inode *whiteout = NULL;
-	struct page *old_dir_page = NULL;
+	struct folio *old_dir_folio = NULL;
 	struct folio *old_folio, *new_folio = NULL;
 	struct f2fs_dir_entry *old_dir_entry = NULL;
 	struct f2fs_dir_entry *old_entry;
@@ -967,10 +967,10 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 	}
 
 	if (old_is_dir && old_dir != new_dir) {
-		old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_page);
+		old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_folio);
 		if (!old_dir_entry) {
-			if (IS_ERR(old_dir_page))
-				err = PTR_ERR(old_dir_page);
+			if (IS_ERR(old_dir_folio))
+				err = PTR_ERR(old_dir_folio);
 			goto out_old;
 		}
 	}
@@ -1055,7 +1055,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 	}
 
 	if (old_dir_entry)
-		f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir);
+		f2fs_set_link(old_inode, old_dir_entry, &old_dir_folio->page, new_dir);
 	if (old_is_dir)
 		f2fs_i_links_write(old_dir, false);
 
@@ -1079,7 +1079,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 	f2fs_folio_put(new_folio, false);
 out_dir:
 	if (old_dir_entry)
-		f2fs_put_page(old_dir_page, 0);
+		f2fs_folio_put(old_dir_folio, false);
 out_old:
 	f2fs_folio_put(old_folio, false);
 out:
@@ -1093,7 +1093,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 	struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
 	struct inode *old_inode = d_inode(old_dentry);
 	struct inode *new_inode = d_inode(new_dentry);
-	struct page *old_dir_page, *new_dir_page;
+	struct folio *old_dir_folio, *new_dir_folio;
 	struct folio *old_folio, *new_folio;
 	struct f2fs_dir_entry *old_dir_entry = NULL, *new_dir_entry = NULL;
 	struct f2fs_dir_entry *old_entry, *new_entry;
@@ -1140,20 +1140,20 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 	if (old_dir != new_dir) {
 		if (S_ISDIR(old_inode->i_mode)) {
 			old_dir_entry = f2fs_parent_dir(old_inode,
-							&old_dir_page);
+							&old_dir_folio);
 			if (!old_dir_entry) {
-				if (IS_ERR(old_dir_page))
-					err = PTR_ERR(old_dir_page);
+				if (IS_ERR(old_dir_folio))
+					err = PTR_ERR(old_dir_folio);
 				goto out_new;
 			}
 		}
 
 		if (S_ISDIR(new_inode->i_mode)) {
 			new_dir_entry = f2fs_parent_dir(new_inode,
-							&new_dir_page);
+							&new_dir_folio);
 			if (!new_dir_entry) {
-				if (IS_ERR(new_dir_page))
-					err = PTR_ERR(new_dir_page);
+				if (IS_ERR(new_dir_folio))
+					err = PTR_ERR(new_dir_folio);
 				goto out_old_dir;
 			}
 		}
@@ -1180,11 +1180,11 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 
 	/* update ".." directory entry info of old dentry */
 	if (old_dir_entry)
-		f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir);
+		f2fs_set_link(old_inode, old_dir_entry, &old_dir_folio->page, new_dir);
 
 	/* update ".." directory entry info of new dentry */
 	if (new_dir_entry)
-		f2fs_set_link(new_inode, new_dir_entry, new_dir_page, old_dir);
+		f2fs_set_link(new_inode, new_dir_entry, &new_dir_folio->page, old_dir);
 
 	/* update directory entry info of old dir inode */
 	f2fs_set_link(old_dir, old_entry, &old_folio->page, new_inode);
@@ -1238,11 +1238,11 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 	return 0;
 out_new_dir:
 	if (new_dir_entry) {
-		f2fs_put_page(new_dir_page, 0);
+		f2fs_folio_put(new_dir_folio, 0);
 	}
 out_old_dir:
 	if (old_dir_entry) {
-		f2fs_put_page(old_dir_page, 0);
+		f2fs_folio_put(old_dir_folio, 0);
 	}
 out_new:
 	f2fs_folio_put(new_folio, false);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 129/153] f2fs: Pass a folio to f2fs_delete_entry()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (127 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 128/153] f2fs: Pass a folio to f2fs_parent_dir() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 130/153] f2fs: Pass a folio to f2fs_delete_inline_entry() Matthew Wilcox (Oracle)
                   ` (25 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers now have a folio so pass it in.  Removes eight calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c      | 26 +++++++++++++-------------
 fs/f2fs/f2fs.h     |  2 +-
 fs/f2fs/namei.c    |  4 ++--
 fs/f2fs/recovery.c |  2 +-
 4 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 987b3a00d29d..610091345ac3 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -860,13 +860,13 @@ void f2fs_drop_nlink(struct inode *dir, struct inode *inode)
  * It only removes the dentry from the dentry page, corresponding name
  * entry in name page does not need to be touched during deletion.
  */
-void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
+void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct folio *folio,
 					struct inode *dir, struct inode *inode)
 {
-	struct	f2fs_dentry_block *dentry_blk;
+	struct f2fs_dentry_block *dentry_blk;
 	unsigned int bit_pos;
 	int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
-	pgoff_t index = page_folio(page)->index;
+	pgoff_t index = folio->index;
 	int i;
 
 	f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
@@ -875,12 +875,12 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
 		f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO);
 
 	if (f2fs_has_inline_dentry(dir))
-		return f2fs_delete_inline_entry(dentry, page, dir, inode);
+		return f2fs_delete_inline_entry(dentry, &folio->page, dir, inode);
 
-	lock_page(page);
-	f2fs_wait_on_page_writeback(page, DATA, true, true);
+	folio_lock(folio);
+	f2fs_folio_wait_writeback(folio, DATA, true, true);
 
-	dentry_blk = page_address(page);
+	dentry_blk = folio_address(folio);
 	bit_pos = dentry - dentry_blk->dentry;
 	for (i = 0; i < slots; i++)
 		__clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap);
@@ -889,19 +889,19 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
 	bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
 			NR_DENTRY_IN_BLOCK,
 			0);
-	set_page_dirty(page);
+	folio_mark_dirty(folio);
 
 	if (bit_pos == NR_DENTRY_IN_BLOCK &&
 		!f2fs_truncate_hole(dir, index, index + 1)) {
-		f2fs_clear_page_cache_dirty_tag(page_folio(page));
-		clear_page_dirty_for_io(page);
-		ClearPageUptodate(page);
-		clear_page_private_all(page);
+		f2fs_clear_page_cache_dirty_tag(folio);
+		folio_clear_dirty_for_io(folio);
+		folio_clear_uptodate(folio);
+		clear_page_private_all(&folio->page);
 
 		inode_dec_dirty_pages(dir);
 		f2fs_remove_dirty_inode(dir);
 	}
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 
 	inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
 	f2fs_mark_inode_dirty_sync(dir, false);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 66b363dd40ba..6b0f572e1602 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3664,7 +3664,7 @@ int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname,
 			struct inode *inode, nid_t ino, umode_t mode);
 int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 			struct inode *inode, nid_t ino, umode_t mode);
-void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
+void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct folio *folio,
 			struct inode *dir, struct inode *inode);
 int f2fs_do_tmpfile(struct inode *inode, struct inode *dir,
 					struct f2fs_filename *fname);
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 689fd9419afd..d8175140e626 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -578,7 +578,7 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
 		f2fs_folio_put(folio, false);
 		goto fail;
 	}
-	f2fs_delete_entry(de, &folio->page, dir, inode);
+	f2fs_delete_entry(de, folio, dir, inode);
 	f2fs_unlock_op(sbi);
 
 	/* VFS negative dentries are incompatible with Encoding and
@@ -1038,7 +1038,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 	inode_set_ctime_current(old_inode);
 	f2fs_mark_inode_dirty_sync(old_inode, false);
 
-	f2fs_delete_entry(old_entry, &old_folio->page, old_dir, NULL);
+	f2fs_delete_entry(old_entry, old_folio, old_dir, NULL);
 	old_folio = NULL;
 
 	if (whiteout) {
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 849d014023d4..0dfc60ac0f37 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -212,7 +212,7 @@ static int recover_dentry(struct inode *inode, struct page *ipage,
 			iput(einode);
 			goto out_put;
 		}
-		f2fs_delete_entry(de, &folio->page, dir, einode);
+		f2fs_delete_entry(de, folio, dir, einode);
 		iput(einode);
 		goto retry;
 	} else if (IS_ERR(folio)) {
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 130/153] f2fs: Pass a folio to f2fs_delete_inline_entry()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (128 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 129/153] f2fs: Pass a folio to f2fs_delete_entry() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 131/153] f2fs: Pass a folio to f2fs_recover_inline_data() Matthew Wilcox (Oracle)
                   ` (24 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The caller now has a folio so pass it in.  Removes four calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c    |  2 +-
 fs/f2fs/f2fs.h   |  3 +--
 fs/f2fs/inline.c | 14 +++++++-------
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 610091345ac3..6dfe7f859265 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -875,7 +875,7 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct folio *folio,
 		f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO);
 
 	if (f2fs_has_inline_dentry(dir))
-		return f2fs_delete_inline_entry(dentry, &folio->page, dir, inode);
+		return f2fs_delete_inline_entry(dentry, folio, dir, inode);
 
 	folio_lock(folio);
 	f2fs_folio_wait_writeback(folio, DATA, true, true);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 6b0f572e1602..dc7463004c75 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4289,8 +4289,7 @@ int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
 int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 			struct inode *inode, nid_t ino, umode_t mode);
 void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry,
-				struct page *page, struct inode *dir,
-				struct inode *inode);
+		struct folio *folio, struct inode *dir, struct inode *inode);
 bool f2fs_empty_inline_dir(struct inode *dir);
 int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
 			struct fscrypt_str *fstr);
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index c2e97e230cd1..1c6dc9731f2a 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -697,8 +697,8 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 	return err;
 }
 
-void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
-					struct inode *dir, struct inode *inode)
+void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry,
+		struct folio *folio, struct inode *dir, struct inode *inode)
 {
 	struct f2fs_dentry_ptr d;
 	void *inline_dentry;
@@ -706,18 +706,18 @@ void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
 	unsigned int bit_pos;
 	int i;
 
-	lock_page(page);
-	f2fs_wait_on_page_writeback(page, NODE, true, true);
+	folio_lock(folio);
+	f2fs_folio_wait_writeback(folio, NODE, true, true);
 
-	inline_dentry = inline_data_addr(dir, page);
+	inline_dentry = inline_data_addr(dir, &folio->page);
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
 
 	bit_pos = dentry - d.dentry;
 	for (i = 0; i < slots; i++)
 		__clear_bit_le(bit_pos + i, d.bitmap);
 
-	set_page_dirty(page);
-	f2fs_put_page(page, 1);
+	folio_mark_dirty(folio);
+	f2fs_folio_put(folio, true);
 
 	inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
 	f2fs_mark_inode_dirty_sync(dir, false);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 131/153] f2fs: Pass a folio to f2fs_recover_inline_data()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (129 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 130/153] f2fs: Pass a folio to f2fs_delete_inline_entry() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 132/153] f2fs: Pass a folio to __recover_inline_status() Matthew Wilcox (Oracle)
                   ` (23 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller has a folio, so pass it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h     | 2 +-
 fs/f2fs/inline.c   | 8 ++++----
 fs/f2fs/recovery.c | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index dc7463004c75..210f0cf0bc22 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4280,7 +4280,7 @@ int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio);
 int f2fs_convert_inline_inode(struct inode *inode);
 int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry);
 int f2fs_write_inline_data(struct inode *inode, struct folio *folio);
-int f2fs_recover_inline_data(struct inode *inode, struct page *npage);
+int f2fs_recover_inline_data(struct inode *inode, struct folio *nfolio);
 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
 		const struct f2fs_filename *fname, struct folio **res_folio,
 		bool use_hash);
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 1c6dc9731f2a..2d2dada85e08 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -291,7 +291,7 @@ int f2fs_write_inline_data(struct inode *inode, struct folio *folio)
 	return 0;
 }
 
-int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
+int f2fs_recover_inline_data(struct inode *inode, struct folio *nfolio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct f2fs_inode *ri = NULL;
@@ -305,8 +305,8 @@ int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
 	 *    x       o  -> remove data blocks, and then recover inline_data
 	 *    x       x  -> recover data blocks
 	 */
-	if (IS_INODE(npage))
-		ri = F2FS_INODE(npage);
+	if (IS_INODE(&nfolio->page))
+		ri = F2FS_INODE(&nfolio->page);
 
 	if (f2fs_has_inline_data(inode) &&
 			ri && (ri->i_inline & F2FS_INLINE_DATA)) {
@@ -318,7 +318,7 @@ int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
 
 		f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 
-		src_addr = inline_data_addr(inode, npage);
+		src_addr = inline_data_addr(inode, &nfolio->page);
 		dst_addr = inline_data_addr(inode, &ifolio->page);
 		memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
 
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 0dfc60ac0f37..bc7041d82dc5 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -640,7 +640,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 	}
 
 	/* step 2: recover inline data */
-	err = f2fs_recover_inline_data(inode, &folio->page);
+	err = f2fs_recover_inline_data(inode, folio);
 	if (err) {
 		if (err == 1)
 			err = 0;
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 132/153] f2fs: Pass a folio to __recover_inline_status()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (130 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 131/153] f2fs: Pass a folio to f2fs_recover_inline_data() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 133/153] f2fs: Pass a folio to inline_data_addr() Matthew Wilcox (Oracle)
                   ` (22 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller has a folio so pass it in.  Removes two calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/inode.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index cbfd536efe20..eda71c432cca 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -95,19 +95,19 @@ static void __set_inode_rdev(struct inode *inode, struct page *node_page)
 	}
 }
 
-static void __recover_inline_status(struct inode *inode, struct page *ipage)
+static void __recover_inline_status(struct inode *inode, struct folio *ifolio)
 {
-	void *inline_data = inline_data_addr(inode, ipage);
+	void *inline_data = inline_data_addr(inode, &ifolio->page);
 	__le32 *start = inline_data;
 	__le32 *end = start + MAX_INLINE_DATA(inode) / sizeof(__le32);
 
 	while (start < end) {
 		if (*start++) {
-			f2fs_wait_on_page_writeback(ipage, NODE, true, true);
+			f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 
 			set_inode_flag(inode, FI_DATA_EXIST);
-			set_raw_inline(inode, F2FS_INODE(ipage));
-			set_page_dirty(ipage);
+			set_raw_inline(inode, F2FS_INODE(&ifolio->page));
+			folio_mark_dirty(ifolio);
 			return;
 		}
 	}
@@ -471,7 +471,7 @@ static int do_read_inode(struct inode *inode)
 
 	/* check data exist */
 	if (f2fs_has_inline_data(inode) && !f2fs_exist_data(inode))
-		__recover_inline_status(inode, &node_folio->page);
+		__recover_inline_status(inode, node_folio);
 
 	/* try to recover cold bit for non-dir inode */
 	if (!S_ISDIR(inode->i_mode) && !is_cold_node(&node_folio->page)) {
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 133/153] f2fs: Pass a folio to inline_data_addr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (131 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 132/153] f2fs: Pass a folio to __recover_inline_status() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 134/153] f2fs: Convert f2fs_put_page_dic() to f2fs_put_folio_dic() Matthew Wilcox (Oracle)
                   ` (21 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers now have a folio, so pass it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c    |  2 +-
 fs/f2fs/f2fs.h   |  4 ++--
 fs/f2fs/inline.c | 26 +++++++++++++-------------
 fs/f2fs/inode.c  |  2 +-
 4 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 6dfe7f859265..c52609b6ba3a 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -628,7 +628,7 @@ bool f2fs_has_enough_room(struct inode *dir, struct folio *ifolio,
 	unsigned int bit_pos;
 	int slots = GET_DENTRY_SLOTS(fname->disk_name.len);
 
-	make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, &ifolio->page));
+	make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, ifolio));
 
 	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
 
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 210f0cf0bc22..55fcdd334ea4 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3383,9 +3383,9 @@ static inline bool f2fs_is_cow_file(struct inode *inode)
 	return is_inode_flag_set(inode, FI_COW_FILE);
 }
 
-static inline void *inline_data_addr(struct inode *inode, struct page *page)
+static inline void *inline_data_addr(struct inode *inode, struct folio *folio)
 {
-	__le32 *addr = get_dnode_addr(inode, page);
+	__le32 *addr = get_dnode_addr(inode, &folio->page);
 
 	return (void *)(addr + DEF_INLINE_RESERVED_SIZE);
 }
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 2d2dada85e08..b7d160736630 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -91,7 +91,7 @@ void f2fs_do_read_inline_data(struct folio *folio, struct folio *ifolio)
 	folio_zero_segment(folio, MAX_INLINE_DATA(inode), folio_size(folio));
 
 	/* Copy the whole inline data block */
-	memcpy_to_folio(folio, 0, inline_data_addr(inode, &ifolio->page),
+	memcpy_to_folio(folio, 0, inline_data_addr(inode, ifolio),
 		       MAX_INLINE_DATA(inode));
 	if (!folio_test_uptodate(folio))
 		folio_mark_uptodate(folio);
@@ -105,7 +105,7 @@ void f2fs_truncate_inline_inode(struct inode *inode, struct folio *ifolio,
 	if (from >= MAX_INLINE_DATA(inode))
 		return;
 
-	addr = inline_data_addr(inode, &ifolio->page);
+	addr = inline_data_addr(inode, ifolio);
 
 	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 	memset(addr + from, 0, MAX_INLINE_DATA(inode) - from);
@@ -277,7 +277,7 @@ int f2fs_write_inline_data(struct inode *inode, struct folio *folio)
 	f2fs_bug_on(F2FS_I_SB(inode), folio->index);
 
 	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
-	memcpy_from_folio(inline_data_addr(inode, &ifolio->page),
+	memcpy_from_folio(inline_data_addr(inode, ifolio),
 			 folio, 0, MAX_INLINE_DATA(inode));
 	folio_mark_dirty(ifolio);
 
@@ -318,8 +318,8 @@ int f2fs_recover_inline_data(struct inode *inode, struct folio *nfolio)
 
 		f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 
-		src_addr = inline_data_addr(inode, &nfolio->page);
-		dst_addr = inline_data_addr(inode, &ifolio->page);
+		src_addr = inline_data_addr(inode, nfolio);
+		dst_addr = inline_data_addr(inode, ifolio);
 		memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
 
 		set_inode_flag(inode, FI_INLINE_DATA);
@@ -367,7 +367,7 @@ struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
 		return NULL;
 	}
 
-	inline_dentry = inline_data_addr(dir, &ifolio->page);
+	inline_dentry = inline_data_addr(dir, ifolio);
 
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
 	de = f2fs_find_target_dentry(&d, fname, NULL, use_hash);
@@ -390,7 +390,7 @@ int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
 	struct f2fs_dentry_ptr d;
 	void *inline_dentry;
 
-	inline_dentry = inline_data_addr(inode, &ifolio->page);
+	inline_dentry = inline_data_addr(inode, ifolio);
 
 	make_dentry_ptr_inline(inode, &d, inline_dentry);
 	f2fs_do_make_empty_dir(inode, parent, &d);
@@ -620,7 +620,7 @@ int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
 		goto out_fname;
 	}
 
-	inline_dentry = inline_data_addr(dir, &ifolio->page);
+	inline_dentry = inline_data_addr(dir, ifolio);
 
 	err = do_convert_inline_dir(dir, ifolio, inline_dentry);
 	if (!err)
@@ -648,7 +648,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 	if (IS_ERR(ifolio))
 		return PTR_ERR(ifolio);
 
-	inline_dentry = inline_data_addr(dir, &ifolio->page);
+	inline_dentry = inline_data_addr(dir, ifolio);
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
 
 	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
@@ -709,7 +709,7 @@ void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry,
 	folio_lock(folio);
 	f2fs_folio_wait_writeback(folio, NODE, true, true);
 
-	inline_dentry = inline_data_addr(dir, &folio->page);
+	inline_dentry = inline_data_addr(dir, folio);
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
 
 	bit_pos = dentry - d.dentry;
@@ -738,7 +738,7 @@ bool f2fs_empty_inline_dir(struct inode *dir)
 	if (IS_ERR(ifolio))
 		return false;
 
-	inline_dentry = inline_data_addr(dir, &ifolio->page);
+	inline_dentry = inline_data_addr(dir, ifolio);
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
 
 	bit_pos = find_next_bit_le(d.bitmap, d.max, bit_pos);
@@ -775,7 +775,7 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
 	 */
 	folio_unlock(ifolio);
 
-	inline_dentry = inline_data_addr(inode, &ifolio->page);
+	inline_dentry = inline_data_addr(inode, ifolio);
 
 	make_dentry_ptr_inline(inode, &d, inline_dentry);
 
@@ -824,7 +824,7 @@ int f2fs_inline_data_fiemap(struct inode *inode,
 		goto out;
 
 	byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits;
-	byteaddr += (char *)inline_data_addr(inode, &ifolio->page) -
+	byteaddr += (char *)inline_data_addr(inode, ifolio) -
 					(char *)F2FS_INODE(&ifolio->page);
 	err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags);
 	trace_f2fs_fiemap(inode, start, byteaddr, ilen, flags, err);
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index eda71c432cca..add82902826f 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -97,7 +97,7 @@ static void __set_inode_rdev(struct inode *inode, struct page *node_page)
 
 static void __recover_inline_status(struct inode *inode, struct folio *ifolio)
 {
-	void *inline_data = inline_data_addr(inode, &ifolio->page);
+	void *inline_data = inline_data_addr(inode, ifolio);
 	__le32 *start = inline_data;
 	__le32 *end = start + MAX_INLINE_DATA(inode) / sizeof(__le32);
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 134/153] f2fs: Convert f2fs_put_page_dic() to f2fs_put_folio_dic()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (132 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 133/153] f2fs: Pass a folio to inline_data_addr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 135/153] f2fs: Pass a folio to f2fs_set_link() Matthew Wilcox (Oracle)
                   ` (20 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller has a folio, so pass it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c | 9 ++++-----
 fs/f2fs/data.c     | 2 +-
 fs/f2fs/f2fs.h     | 4 ++--
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index a4cd957f6ade..ed889ed4fd5c 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1869,14 +1869,13 @@ void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed,
 }
 
 /*
- * Put a reference to a compressed page's decompress_io_ctx.
+ * Put a reference to a compressed folio's decompress_io_ctx.
  *
- * This is called when the page is no longer needed and can be freed.
+ * This is called when the folio is no longer needed and can be freed.
  */
-void f2fs_put_page_dic(struct page *page, bool in_task)
+void f2fs_put_folio_dic(struct folio *folio, bool in_task)
 {
-	struct decompress_io_ctx *dic =
-			(struct decompress_io_ctx *)page_private(page);
+	struct decompress_io_ctx *dic = folio->private;
 
 	f2fs_put_dic(dic, in_task);
 }
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 952b3885a092..d899341a04f8 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -146,7 +146,7 @@ static void f2fs_finish_read_bio(struct bio *bio, bool in_task)
 			if (ctx && !ctx->decompression_attempted)
 				f2fs_end_read_compressed_page(&folio->page, true, 0,
 							in_task);
-			f2fs_put_page_dic(&folio->page, in_task);
+			f2fs_put_folio_dic(folio, in_task);
 			continue;
 		}
 
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 55fcdd334ea4..b8ddc2df0571 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4438,7 +4438,7 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
 struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc);
 void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed,
 				bool in_task);
-void f2fs_put_page_dic(struct page *page, bool in_task);
+void f2fs_put_folio_dic(struct folio *folio, bool in_task);
 unsigned int f2fs_cluster_blocks_are_contiguous(struct dnode_of_data *dn,
 						unsigned int ofs_in_node);
 int f2fs_init_compress_ctx(struct compress_ctx *cc);
@@ -4494,7 +4494,7 @@ static inline void f2fs_end_read_compressed_page(struct page *page,
 {
 	WARN_ON_ONCE(1);
 }
-static inline void f2fs_put_page_dic(struct page *page, bool in_task)
+static inline void f2fs_put_folio_dic(struct folio *folio, bool in_task)
 {
 	WARN_ON_ONCE(1);
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 135/153] f2fs: Pass a folio to f2fs_set_link()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (133 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 134/153] f2fs: Convert f2fs_put_page_dic() to f2fs_put_folio_dic() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 136/153] f2fs: Use a folio in need_inode_page_update() Matthew Wilcox (Oracle)
                   ` (19 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers now have a folio, pass it in.  Removes four calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c   | 10 +++++-----
 fs/f2fs/f2fs.h  |  2 +-
 fs/f2fs/namei.c | 12 ++++++------
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index c52609b6ba3a..4eafdb1d1bc0 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -426,19 +426,19 @@ ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
 }
 
 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
-		struct page *page, struct inode *inode)
+		struct folio *folio, struct inode *inode)
 {
 	enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA;
 
-	lock_page(page);
-	f2fs_wait_on_page_writeback(page, type, true, true);
+	folio_lock(folio);
+	f2fs_folio_wait_writeback(folio, type, true, true);
 	de->ino = cpu_to_le32(inode->i_ino);
 	de->file_type = fs_umode_to_ftype(inode->i_mode);
-	set_page_dirty(page);
+	folio_mark_dirty(folio);
 
 	inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
 	f2fs_mark_inode_dirty_sync(dir, false);
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 }
 
 static void init_dent_inode(struct inode *dir, struct inode *inode,
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index b8ddc2df0571..014ef580c0e4 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3652,7 +3652,7 @@ struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct folio **f);
 ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
 			struct folio **folio);
 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
-			struct page *page, struct inode *inode);
+			struct folio *folio, struct inode *inode);
 bool f2fs_has_enough_room(struct inode *dir, struct folio *ifolio,
 			  const struct f2fs_filename *fname);
 void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index d8175140e626..c2da97da6b36 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -998,7 +998,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 		if (err)
 			goto put_out_dir;
 
-		f2fs_set_link(new_dir, new_entry, &new_folio->page, old_inode);
+		f2fs_set_link(new_dir, new_entry, new_folio, old_inode);
 		new_folio = NULL;
 
 		inode_set_ctime_current(new_inode);
@@ -1055,7 +1055,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 	}
 
 	if (old_dir_entry)
-		f2fs_set_link(old_inode, old_dir_entry, &old_dir_folio->page, new_dir);
+		f2fs_set_link(old_inode, old_dir_entry, old_dir_folio, new_dir);
 	if (old_is_dir)
 		f2fs_i_links_write(old_dir, false);
 
@@ -1180,14 +1180,14 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 
 	/* update ".." directory entry info of old dentry */
 	if (old_dir_entry)
-		f2fs_set_link(old_inode, old_dir_entry, &old_dir_folio->page, new_dir);
+		f2fs_set_link(old_inode, old_dir_entry, old_dir_folio, new_dir);
 
 	/* update ".." directory entry info of new dentry */
 	if (new_dir_entry)
-		f2fs_set_link(new_inode, new_dir_entry, &new_dir_folio->page, old_dir);
+		f2fs_set_link(new_inode, new_dir_entry, new_dir_folio, old_dir);
 
 	/* update directory entry info of old dir inode */
-	f2fs_set_link(old_dir, old_entry, &old_folio->page, new_inode);
+	f2fs_set_link(old_dir, old_entry, old_folio, new_inode);
 
 	f2fs_down_write(&F2FS_I(old_inode)->i_sem);
 	if (!old_dir_entry)
@@ -1206,7 +1206,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 	f2fs_mark_inode_dirty_sync(old_dir, false);
 
 	/* update directory entry info of new dir inode */
-	f2fs_set_link(new_dir, new_entry, &new_folio->page, old_inode);
+	f2fs_set_link(new_dir, new_entry, new_folio, old_inode);
 
 	f2fs_down_write(&F2FS_I(new_inode)->i_sem);
 	if (!new_dir_entry)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 136/153] f2fs: Use a folio in need_inode_page_update()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (134 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 135/153] f2fs: Pass a folio to f2fs_set_link() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 137/153] f2fs: Use a folio in f2fs_truncate_meta_inode_pages() Matthew Wilcox (Oracle)
                   ` (18 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Fetch a folio from the pagecache instead of a page.  Removes two
calls to compound_head()

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/file.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 8f1adaa9f90a..382ab04a75c3 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -226,12 +226,13 @@ static inline enum cp_reason_type need_do_checkpoint(struct inode *inode)
 
 static bool need_inode_page_update(struct f2fs_sb_info *sbi, nid_t ino)
 {
-	struct page *i = find_get_page(NODE_MAPPING(sbi), ino);
+	struct folio *i = filemap_get_folio(NODE_MAPPING(sbi), ino);
 	bool ret = false;
 	/* But we need to avoid that there are some inode updates */
-	if ((i && PageDirty(i)) || f2fs_need_inode_block_update(sbi, ino))
+	if ((!IS_ERR(i) && folio_test_dirty(i)) ||
+	    f2fs_need_inode_block_update(sbi, ino))
 		ret = true;
-	f2fs_put_page(i, 0);
+	f2fs_folio_put(i, false);
 	return ret;
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 137/153] f2fs: Use a folio in f2fs_truncate_meta_inode_pages()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (135 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 136/153] f2fs: Use a folio in need_inode_page_update() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 138/153] f2fs: Use a folio in f2fs_cache_compressed_page() Matthew Wilcox (Oracle)
                   ` (17 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Fetch a folio from the pagecache instead of a page.  Removes two calls
to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 014ef580c0e4..3603523f0c25 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4804,13 +4804,13 @@ static inline void f2fs_truncate_meta_inode_pages(struct f2fs_sb_info *sbi,
 	int i = 0;
 
 	do {
-		struct page *page;
+		struct folio *folio;
 
-		page = find_get_page(META_MAPPING(sbi), blkaddr + i);
-		if (page) {
-			if (folio_test_writeback(page_folio(page)))
+		folio = filemap_get_folio(META_MAPPING(sbi), blkaddr + i);
+		if (!IS_ERR(folio)) {
+			if (folio_test_writeback(folio))
 				need_submit = true;
-			f2fs_put_page(page, 0);
+			f2fs_folio_put(folio, false);
 		}
 	} while (++i < cnt && !need_submit);
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 138/153] f2fs: Use a folio in f2fs_cache_compressed_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (136 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 137/153] f2fs: Use a folio in f2fs_truncate_meta_inode_pages() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 139/153] f2fs: Use a folio in prepare_compress_overwrite() Matthew Wilcox (Oracle)
                   ` (16 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Look up a folio instead of a page, and if that fails, allocate a folio.
Removes five calls to compound_head(), one of the last few references to
add_to_page_cache_lru() and honours the cpuset_do_page_mem_spread()
setting.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index ed889ed4fd5c..4c91038b3f6f 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1928,7 +1928,7 @@ void f2fs_invalidate_compress_pages_range(struct f2fs_sb_info *sbi,
 void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
 						nid_t ino, block_t blkaddr)
 {
-	struct page *cpage;
+	struct folio *cfolio;
 	int ret;
 
 	if (!test_opt(sbi, COMPRESS_CACHE))
@@ -1940,28 +1940,28 @@ void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
 	if (!f2fs_available_free_memory(sbi, COMPRESS_PAGE))
 		return;
 
-	cpage = find_get_page(COMPRESS_MAPPING(sbi), blkaddr);
-	if (cpage) {
-		f2fs_put_page(cpage, 0);
+	cfolio = filemap_get_folio(COMPRESS_MAPPING(sbi), blkaddr);
+	if (!IS_ERR(cfolio)) {
+		f2fs_folio_put(cfolio, false);
 		return;
 	}
 
-	cpage = alloc_page(__GFP_NOWARN | __GFP_IO);
-	if (!cpage)
+	cfolio = filemap_alloc_folio(__GFP_NOWARN | __GFP_IO, 0);
+	if (!cfolio)
 		return;
 
-	ret = add_to_page_cache_lru(cpage, COMPRESS_MAPPING(sbi),
+	ret = filemap_add_folio(COMPRESS_MAPPING(sbi), cfolio,
 						blkaddr, GFP_NOFS);
 	if (ret) {
-		f2fs_put_page(cpage, 0);
+		f2fs_folio_put(cfolio, false);
 		return;
 	}
 
-	set_page_private_data(cpage, ino);
+	set_page_private_data(&cfolio->page, ino);
 
-	memcpy(page_address(cpage), page_address(page), PAGE_SIZE);
-	SetPageUptodate(cpage);
-	f2fs_put_page(cpage, 1);
+	memcpy(folio_address(cfolio), page_address(page), PAGE_SIZE);
+	folio_mark_uptodate(cfolio);
+	f2fs_folio_put(cfolio, true);
 }
 
 bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 139/153] f2fs: Use a folio in prepare_compress_overwrite()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (137 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 138/153] f2fs: Use a folio in f2fs_cache_compressed_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 140/153] f2fs: Convert f2fs_load_compressed_page() to f2fs_load_compressed_folio() Matthew Wilcox (Oracle)
                   ` (15 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Add f2fs_filemap_get_folio() as a wrapper around __filemap_get_folio()
which can inject an error.  Removes seven calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c | 32 ++++++++++++++++----------------
 fs/f2fs/f2fs.h     | 10 ++++++++++
 2 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 4c91038b3f6f..2f9c35d0abda 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1095,7 +1095,7 @@ static int prepare_compress_overwrite(struct compress_ctx *cc,
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(cc->inode);
 	struct address_space *mapping = cc->inode->i_mapping;
-	struct page *page;
+	struct folio *folio;
 	sector_t last_block_in_bio;
 	fgf_t fgp_flag = FGP_LOCK | FGP_WRITE | FGP_CREAT;
 	pgoff_t start_idx = start_idx_of_cluster(cc);
@@ -1110,19 +1110,19 @@ static int prepare_compress_overwrite(struct compress_ctx *cc,
 	if (ret)
 		return ret;
 
-	/* keep page reference to avoid page reclaim */
+	/* keep folio reference to avoid page reclaim */
 	for (i = 0; i < cc->cluster_size; i++) {
-		page = f2fs_pagecache_get_page(mapping, start_idx + i,
-							fgp_flag, GFP_NOFS);
-		if (!page) {
-			ret = -ENOMEM;
+		folio = f2fs_filemap_get_folio(mapping, start_idx + i,
+				fgp_flag, GFP_NOFS);
+		if (IS_ERR(folio)) {
+			ret = PTR_ERR(folio);
 			goto unlock_pages;
 		}
 
-		if (PageUptodate(page))
-			f2fs_put_page(page, 1);
+		if (folio_test_uptodate(folio))
+			f2fs_folio_put(folio, true);
 		else
-			f2fs_compress_ctx_add_page(cc, page_folio(page));
+			f2fs_compress_ctx_add_page(cc, folio);
 	}
 
 	if (!f2fs_cluster_is_empty(cc)) {
@@ -1145,17 +1145,17 @@ static int prepare_compress_overwrite(struct compress_ctx *cc,
 	for (i = 0; i < cc->cluster_size; i++) {
 		f2fs_bug_on(sbi, cc->rpages[i]);
 
-		page = find_lock_page(mapping, start_idx + i);
-		if (!page) {
-			/* page can be truncated */
+		folio = filemap_lock_folio(mapping, start_idx + i);
+		if (IS_ERR(folio)) {
+			/* folio could be truncated */
 			goto release_and_retry;
 		}
 
-		f2fs_wait_on_page_writeback(page, DATA, true, true);
-		f2fs_compress_ctx_add_page(cc, page_folio(page));
+		f2fs_folio_wait_writeback(folio, DATA, true, true);
+		f2fs_compress_ctx_add_page(cc, folio);
 
-		if (!PageUptodate(page)) {
-			f2fs_handle_page_eio(sbi, page_folio(page), DATA);
+		if (!folio_test_uptodate(folio)) {
+			f2fs_handle_page_eio(sbi, folio, DATA);
 release_and_retry:
 			f2fs_put_rpages(cc);
 			f2fs_unlock_rpages(cc, i + 1);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 3603523f0c25..af0420f76e98 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2849,6 +2849,16 @@ static inline struct folio *f2fs_grab_cache_folio(struct address_space *mapping,
 	return folio;
 }
 
+static inline struct folio *f2fs_filemap_get_folio(
+				struct address_space *mapping, pgoff_t index,
+				fgf_t fgp_flags, gfp_t gfp_mask)
+{
+	if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_GET))
+		return ERR_PTR(-ENOMEM);
+
+	return __filemap_get_folio(mapping, index, fgp_flags, gfp_mask);
+}
+
 static inline struct page *f2fs_pagecache_get_page(
 				struct address_space *mapping, pgoff_t index,
 				fgf_t fgp_flags, gfp_t gfp_mask)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 140/153] f2fs: Convert f2fs_load_compressed_page() to f2fs_load_compressed_folio()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (138 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 139/153] f2fs: Use a folio in prepare_compress_overwrite() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 141/153] f2fs: Use a folio in f2fs_encrypt_one_page() Matthew Wilcox (Oracle)
                   ` (14 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller already has a folio, so pass it in.  Copy the entire
size of the folio to support large block sizes.  Remove two calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c | 16 ++++++++--------
 fs/f2fs/data.c     |  3 +--
 fs/f2fs/f2fs.h     |  6 +++---
 3 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 2f9c35d0abda..9da80914304f 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1964,25 +1964,25 @@ void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
 	f2fs_folio_put(cfolio, true);
 }
 
-bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+bool f2fs_load_compressed_folio(struct f2fs_sb_info *sbi, struct folio *folio,
 								block_t blkaddr)
 {
-	struct page *cpage;
+	struct folio *cfolio;
 	bool hitted = false;
 
 	if (!test_opt(sbi, COMPRESS_CACHE))
 		return false;
 
-	cpage = f2fs_pagecache_get_page(COMPRESS_MAPPING(sbi),
+	cfolio = f2fs_filemap_get_folio(COMPRESS_MAPPING(sbi),
 				blkaddr, FGP_LOCK | FGP_NOWAIT, GFP_NOFS);
-	if (cpage) {
-		if (PageUptodate(cpage)) {
+	if (!IS_ERR(cfolio)) {
+		if (folio_test_uptodate(cfolio)) {
 			atomic_inc(&sbi->compress_page_hit);
-			memcpy(page_address(page),
-				page_address(cpage), PAGE_SIZE);
+			memcpy(folio_address(folio),
+				folio_address(cfolio), folio_size(folio));
 			hitted = true;
 		}
-		f2fs_put_page(cpage, 1);
+		f2fs_folio_put(cfolio, true);
 	}
 
 	return hitted;
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index d899341a04f8..8980b77bfdab 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -2287,8 +2287,7 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
 
 		f2fs_wait_on_block_writeback(inode, blkaddr);
 
-		if (f2fs_load_compressed_page(sbi, folio_page(folio, 0),
-								blkaddr)) {
+		if (f2fs_load_compressed_folio(sbi, folio, blkaddr)) {
 			if (atomic_dec_and_test(&dic->remaining_pages)) {
 				f2fs_decompress_cluster(dic, true);
 				break;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index af0420f76e98..e459558fc071 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4465,7 +4465,7 @@ void f2fs_invalidate_compress_pages_range(struct f2fs_sb_info *sbi,
 					block_t blkaddr, unsigned int len);
 void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
 						nid_t ino, block_t blkaddr);
-bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+bool f2fs_load_compressed_folio(struct f2fs_sb_info *sbi, struct folio *folio,
 								block_t blkaddr);
 void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino);
 #define inc_compr_inode_stat(inode)					\
@@ -4521,8 +4521,8 @@ static inline void f2fs_invalidate_compress_pages_range(struct f2fs_sb_info *sbi
 				block_t blkaddr, unsigned int len) { }
 static inline void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi,
 				struct page *page, nid_t ino, block_t blkaddr) { }
-static inline bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi,
-				struct page *page, block_t blkaddr) { return false; }
+static inline bool f2fs_load_compressed_folio(struct f2fs_sb_info *sbi,
+		struct folio *folio, block_t blkaddr) { return false; }
 static inline void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi,
 							nid_t ino) { }
 #define inc_compr_inode_stat(inode)		do { } while (0)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 141/153] f2fs: Use a folio in f2fs_encrypt_one_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (139 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 140/153] f2fs: Convert f2fs_load_compressed_page() to f2fs_load_compressed_folio() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 142/153] f2fs: Use a folio in redirty_blocks() Matthew Wilcox (Oracle)
                   ` (13 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Fetch a folio from the page cache instead of a page.  Removes two calls
to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 8980b77bfdab..d67731f042cf 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -2503,7 +2503,8 @@ static void f2fs_readahead(struct readahead_control *rac)
 int f2fs_encrypt_one_page(struct f2fs_io_info *fio)
 {
 	struct inode *inode = fio_inode(fio);
-	struct page *mpage, *page;
+	struct folio *mfolio;
+	struct page *page;
 	gfp_t gfp_flags = GFP_NOFS;
 
 	if (!f2fs_encrypted_file(inode))
@@ -2528,12 +2529,12 @@ int f2fs_encrypt_one_page(struct f2fs_io_info *fio)
 		return PTR_ERR(fio->encrypted_page);
 	}
 
-	mpage = find_lock_page(META_MAPPING(fio->sbi), fio->old_blkaddr);
-	if (mpage) {
-		if (PageUptodate(mpage))
-			memcpy(page_address(mpage),
+	mfolio = filemap_lock_folio(META_MAPPING(fio->sbi), fio->old_blkaddr);
+	if (!IS_ERR(mfolio)) {
+		if (folio_test_uptodate(mfolio))
+			memcpy(folio_address(mfolio),
 				page_address(fio->encrypted_page), PAGE_SIZE);
-		f2fs_put_page(mpage, 1);
+		f2fs_folio_put(mfolio, true);
 	}
 	return 0;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 142/153] f2fs: Use a folio in redirty_blocks()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (140 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 141/153] f2fs: Use a folio in f2fs_encrypt_one_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 143/153] f2fs: Use a folio in f2fs_wait_on_block_writeback() Matthew Wilcox (Oracle)
                   ` (12 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Support large folios & simplify the loops in redirty_blocks().
Use the folio APIs and remove four calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/file.c | 38 ++++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 18 deletions(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 382ab04a75c3..004dc7903c1c 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -4344,34 +4344,36 @@ static int redirty_blocks(struct inode *inode, pgoff_t page_idx, int len)
 {
 	DEFINE_READAHEAD(ractl, NULL, NULL, inode->i_mapping, page_idx);
 	struct address_space *mapping = inode->i_mapping;
-	struct page *page;
+	struct folio *folio;
 	pgoff_t redirty_idx = page_idx;
-	int i, page_len = 0, ret = 0;
+	int page_len = 0, ret = 0;
 
 	page_cache_ra_unbounded(&ractl, len, 0);
 
-	for (i = 0; i < len; i++, page_idx++) {
-		page = read_cache_page(mapping, page_idx, NULL, NULL);
-		if (IS_ERR(page)) {
-			ret = PTR_ERR(page);
+	do {
+		folio = read_cache_folio(mapping, page_idx, NULL, NULL);
+		if (IS_ERR(folio)) {
+			ret = PTR_ERR(folio);
 			break;
 		}
-		page_len++;
-	}
+		page_len += folio_nr_pages(folio) - (page_idx - folio->index);
+		page_idx = folio_next_index(folio);
+	} while (page_len < len);
 
-	for (i = 0; i < page_len; i++, redirty_idx++) {
-		page = find_lock_page(mapping, redirty_idx);
+	do {
+		folio = filemap_lock_folio(mapping, redirty_idx);
 
-		/* It will never fail, when page has pinned above */
-		f2fs_bug_on(F2FS_I_SB(inode), !page);
+		/* It will never fail, when folio has pinned above */
+		f2fs_bug_on(F2FS_I_SB(inode), IS_ERR(folio));
 
-		f2fs_wait_on_page_writeback(page, DATA, true, true);
+		f2fs_folio_wait_writeback(folio, DATA, true, true);
 
-		set_page_dirty(page);
-		set_page_private_gcing(page);
-		f2fs_put_page(page, 1);
-		f2fs_put_page(page, 0);
-	}
+		folio_mark_dirty(folio);
+		set_page_private_gcing(&folio->page);
+		redirty_idx = folio_next_index(folio);
+		folio_unlock(folio);
+		folio_put_refs(folio, 2);
+	} while (redirty_idx < page_idx);
 
 	return ret;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 143/153] f2fs: Use a folio in f2fs_wait_on_block_writeback()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (141 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 142/153] f2fs: Use a folio in redirty_blocks() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 144/153] f2fs: Pass a folio to f2fs_init_read_extent_tree() Matthew Wilcox (Oracle)
                   ` (11 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Fetch a folio from the pagecache and use it.  Removes two calls
to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/segment.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 88890755a394..49cb5d282c45 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -4178,7 +4178,7 @@ void f2fs_folio_wait_writeback(struct folio *folio, enum page_type type,
 void f2fs_wait_on_block_writeback(struct inode *inode, block_t blkaddr)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	struct page *cpage;
+	struct folio *cfolio;
 
 	if (!f2fs_meta_inode_gc_required(inode))
 		return;
@@ -4186,10 +4186,10 @@ void f2fs_wait_on_block_writeback(struct inode *inode, block_t blkaddr)
 	if (!__is_valid_data_blkaddr(blkaddr))
 		return;
 
-	cpage = find_lock_page(META_MAPPING(sbi), blkaddr);
-	if (cpage) {
-		f2fs_wait_on_page_writeback(cpage, DATA, true, true);
-		f2fs_put_page(cpage, 1);
+	cfolio = filemap_lock_folio(META_MAPPING(sbi), blkaddr);
+	if (!IS_ERR(cfolio)) {
+		f2fs_folio_wait_writeback(cfolio, DATA, true, true);
+		f2fs_folio_put(cfolio, true);
 	}
 }
 
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 144/153] f2fs: Pass a folio to f2fs_init_read_extent_tree()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (142 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 143/153] f2fs: Use a folio in f2fs_wait_on_block_writeback() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 145/153] f2fs: Return a folio from f2fs_init_inode_metadata() Matthew Wilcox (Oracle)
                   ` (10 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller alredy has a folio so pass it in.  Remove two calls
to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/extent_cache.c | 8 ++++----
 fs/f2fs/f2fs.h         | 2 +-
 fs/f2fs/inode.c        | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index 347b3b647834..eabf49beebc1 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -407,11 +407,11 @@ static void __drop_largest_extent(struct extent_tree *et,
 	}
 }
 
-void f2fs_init_read_extent_tree(struct inode *inode, struct page *ipage)
+void f2fs_init_read_extent_tree(struct inode *inode, struct folio *ifolio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct extent_tree_info *eti = &sbi->extent_tree[EX_READ];
-	struct f2fs_extent *i_ext = &F2FS_INODE(ipage)->i_ext;
+	struct f2fs_extent *i_ext = &F2FS_INODE(&ifolio->page)->i_ext;
 	struct extent_tree *et;
 	struct extent_node *en;
 	struct extent_info ei;
@@ -419,9 +419,9 @@ void f2fs_init_read_extent_tree(struct inode *inode, struct page *ipage)
 	if (!__may_extent_tree(inode, EX_READ)) {
 		/* drop largest read extent */
 		if (i_ext->len) {
-			f2fs_wait_on_page_writeback(ipage, NODE, true, true);
+			f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 			i_ext->len = 0;
-			set_page_dirty(ipage);
+			folio_mark_dirty(ifolio);
 		}
 		set_inode_flag(inode, FI_NO_EXTENT);
 		return;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index e459558fc071..ff0b1d57e103 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4332,7 +4332,7 @@ int __init f2fs_create_extent_cache(void);
 void f2fs_destroy_extent_cache(void);
 
 /* read extent cache ops */
-void f2fs_init_read_extent_tree(struct inode *inode, struct page *ipage);
+void f2fs_init_read_extent_tree(struct inode *inode, struct folio *ifolio);
 bool f2fs_lookup_read_extent_cache(struct inode *inode, pgoff_t pgofs,
 			struct extent_info *ei);
 bool f2fs_lookup_read_extent_cache_block(struct inode *inode, pgoff_t index,
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index add82902826f..0d45e3a249f8 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -531,7 +531,7 @@ static int do_read_inode(struct inode *inode)
 	}
 
 	/* Need all the flag bits */
-	f2fs_init_read_extent_tree(inode, &node_folio->page);
+	f2fs_init_read_extent_tree(inode, node_folio);
 	f2fs_init_age_extent_tree(inode);
 
 	f2fs_folio_put(node_folio, true);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 145/153] f2fs: Return a folio from f2fs_init_inode_metadata()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (143 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 144/153] f2fs: Pass a folio to f2fs_init_read_extent_tree() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 146/153] f2fs: Pass a folio to f2fs_update_inode() Matthew Wilcox (Oracle)
                   ` (9 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert all three callers to handle a folio return.  Remove three
calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c    | 30 +++++++++++++++---------------
 fs/f2fs/f2fs.h   |  2 +-
 fs/f2fs/inline.c | 12 ++++++------
 3 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 4eafdb1d1bc0..7e35192de2d9 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -514,7 +514,7 @@ static int make_empty_dir(struct inode *inode,
 	return 0;
 }
 
-struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
+struct folio *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 		const struct f2fs_filename *fname, struct folio *dfolio)
 {
 	struct folio *folio;
@@ -523,7 +523,7 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 	if (is_inode_flag_set(inode, FI_NEW_INODE)) {
 		folio = f2fs_new_inode_folio(inode);
 		if (IS_ERR(folio))
-			return &folio->page;
+			return folio;
 
 		if (S_ISDIR(inode->i_mode)) {
 			/* in order to handle error case */
@@ -554,7 +554,7 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 	} else {
 		folio = f2fs_get_inode_folio(F2FS_I_SB(dir), inode->i_ino);
 		if (IS_ERR(folio))
-			return &folio->page;
+			return folio;
 	}
 
 	init_dent_inode(dir, inode, fname, folio);
@@ -574,7 +574,7 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 			f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
 		f2fs_i_links_write(inode, true);
 	}
-	return &folio->page;
+	return folio;
 
 put_error:
 	clear_nlink(inode);
@@ -668,7 +668,7 @@ int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 	struct folio *dentry_folio = NULL;
 	struct f2fs_dentry_block *dentry_blk = NULL;
 	struct f2fs_dentry_ptr d;
-	struct page *page = NULL;
+	struct folio *folio = NULL;
 	int slots, err = 0;
 
 	level = 0;
@@ -719,9 +719,9 @@ int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 
 	if (inode) {
 		f2fs_down_write(&F2FS_I(inode)->i_sem);
-		page = f2fs_init_inode_metadata(inode, dir, fname, NULL);
-		if (IS_ERR(page)) {
-			err = PTR_ERR(page);
+		folio = f2fs_init_inode_metadata(inode, dir, fname, NULL);
+		if (IS_ERR(folio)) {
+			err = PTR_ERR(folio);
 			goto fail;
 		}
 	}
@@ -737,9 +737,9 @@ int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 
 		/* synchronize inode page's data from inode cache */
 		if (is_inode_flag_set(inode, FI_NEW_INODE))
-			f2fs_update_inode(inode, page);
+			f2fs_update_inode(inode, &folio->page);
 
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 	}
 
 	f2fs_update_parent_metadata(dir, inode, current_depth);
@@ -815,16 +815,16 @@ int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 int f2fs_do_tmpfile(struct inode *inode, struct inode *dir,
 					struct f2fs_filename *fname)
 {
-	struct page *page;
+	struct folio *folio;
 	int err = 0;
 
 	f2fs_down_write(&F2FS_I(inode)->i_sem);
-	page = f2fs_init_inode_metadata(inode, dir, fname, NULL);
-	if (IS_ERR(page)) {
-		err = PTR_ERR(page);
+	folio = f2fs_init_inode_metadata(inode, dir, fname, NULL);
+	if (IS_ERR(folio)) {
+		err = PTR_ERR(folio);
 		goto fail;
 	}
-	f2fs_put_page(page, 1);
+	f2fs_folio_put(folio, true);
 
 	clear_inode_flag(inode, FI_NEW_INODE);
 	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index ff0b1d57e103..5d7d51c97bbf 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3648,7 +3648,7 @@ int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
 			unsigned int start_pos, struct fscrypt_str *fstr);
 void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
 			struct f2fs_dentry_ptr *d);
-struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
+struct folio *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 		const struct f2fs_filename *fname, struct folio *dfolio);
 void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
 			unsigned int current_depth);
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index b7d160736630..3b65adb4d1b0 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -641,7 +641,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 	void *inline_dentry = NULL;
 	struct f2fs_dentry_ptr d;
 	int slots = GET_DENTRY_SLOTS(fname->disk_name.len);
-	struct page *page = NULL;
+	struct folio *folio = NULL;
 	int err = 0;
 
 	ifolio = f2fs_get_inode_folio(sbi, dir->i_ino);
@@ -663,9 +663,9 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 	if (inode) {
 		f2fs_down_write_nested(&F2FS_I(inode)->i_sem,
 						SINGLE_DEPTH_NESTING);
-		page = f2fs_init_inode_metadata(inode, dir, fname, ifolio);
-		if (IS_ERR(page)) {
-			err = PTR_ERR(page);
+		folio = f2fs_init_inode_metadata(inode, dir, fname, ifolio);
+		if (IS_ERR(folio)) {
+			err = PTR_ERR(folio);
 			goto fail;
 		}
 	}
@@ -683,9 +683,9 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 
 		/* synchronize inode page's data from inode cache */
 		if (is_inode_flag_set(inode, FI_NEW_INODE))
-			f2fs_update_inode(inode, page);
+			f2fs_update_inode(inode, &folio->page);
 
-		f2fs_put_page(page, 1);
+		f2fs_folio_put(folio, true);
 	}
 
 	f2fs_update_parent_metadata(dir, inode, 0);
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 146/153] f2fs: Pass a folio to f2fs_update_inode()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (144 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 145/153] f2fs: Return a folio from f2fs_init_inode_metadata() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 147/153] f2fs: Pass a folio to set_nid() Matthew Wilcox (Oracle)
                   ` (8 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers now have a folio, so pass it in.  Remove two calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c    |  4 ++--
 fs/f2fs/f2fs.h   |  2 +-
 fs/f2fs/inline.c |  2 +-
 fs/f2fs/inode.c  | 16 ++++++++--------
 fs/f2fs/node.c   |  6 +++---
 5 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 7e35192de2d9..bb9ff8556fb8 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -578,7 +578,7 @@ struct folio *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 
 put_error:
 	clear_nlink(inode);
-	f2fs_update_inode(inode, &folio->page);
+	f2fs_update_inode(inode, folio);
 	f2fs_folio_put(folio, true);
 	return ERR_PTR(err);
 }
@@ -737,7 +737,7 @@ int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 
 		/* synchronize inode page's data from inode cache */
 		if (is_inode_flag_set(inode, FI_NEW_INODE))
-			f2fs_update_inode(inode, &folio->page);
+			f2fs_update_inode(inode, folio);
 
 		f2fs_folio_put(folio, true);
 	}
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 5d7d51c97bbf..a94e62c7d892 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3602,7 +3602,7 @@ void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct page *page);
 struct inode *f2fs_iget(struct super_block *sb, unsigned long ino);
 struct inode *f2fs_iget_retry(struct super_block *sb, unsigned long ino);
 int f2fs_try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink);
-void f2fs_update_inode(struct inode *inode, struct page *node_page);
+void f2fs_update_inode(struct inode *inode, struct folio *node_folio);
 void f2fs_update_inode_page(struct inode *inode);
 int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc);
 void f2fs_evict_inode(struct inode *inode);
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 3b65adb4d1b0..72bb2bed28f8 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -683,7 +683,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 
 		/* synchronize inode page's data from inode cache */
 		if (is_inode_flag_set(inode, FI_NEW_INODE))
-			f2fs_update_inode(inode, &folio->page);
+			f2fs_update_inode(inode, folio);
 
 		f2fs_folio_put(folio, true);
 	}
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 0d45e3a249f8..201e3d2a9adf 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -651,18 +651,18 @@ struct inode *f2fs_iget_retry(struct super_block *sb, unsigned long ino)
 	return inode;
 }
 
-void f2fs_update_inode(struct inode *inode, struct page *node_page)
+void f2fs_update_inode(struct inode *inode, struct folio *node_folio)
 {
 	struct f2fs_inode_info *fi = F2FS_I(inode);
 	struct f2fs_inode *ri;
 	struct extent_tree *et = fi->extent_tree[EX_READ];
 
-	f2fs_wait_on_page_writeback(node_page, NODE, true, true);
-	set_page_dirty(node_page);
+	f2fs_folio_wait_writeback(node_folio, NODE, true, true);
+	folio_mark_dirty(node_folio);
 
 	f2fs_inode_synced(inode);
 
-	ri = F2FS_INODE(node_page);
+	ri = F2FS_INODE(&node_folio->page);
 
 	ri->i_mode = cpu_to_le16(inode->i_mode);
 	ri->i_advise = fi->i_advise;
@@ -737,15 +737,15 @@ void f2fs_update_inode(struct inode *inode, struct page *node_page)
 		}
 	}
 
-	__set_inode_rdev(inode, node_page);
+	__set_inode_rdev(inode, &node_folio->page);
 
 	/* deleted inode */
 	if (inode->i_nlink == 0)
-		clear_page_private_inline(node_page);
+		clear_page_private_inline(&node_folio->page);
 
 	init_idisk_time(inode);
 #ifdef CONFIG_F2FS_CHECK_FS
-	f2fs_inode_chksum_set(F2FS_I_SB(inode), node_page);
+	f2fs_inode_chksum_set(F2FS_I_SB(inode), &node_folio->page);
 #endif
 }
 
@@ -772,7 +772,7 @@ void f2fs_update_inode_page(struct inode *inode)
 		f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_UPDATE_INODE);
 		return;
 	}
-	f2fs_update_inode(inode, &node_folio->page);
+	f2fs_update_inode(inode, node_folio);
 	f2fs_folio_put(node_folio, true);
 }
 
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index bf583cd2a589..152c664f94bf 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1872,7 +1872,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 				if (IS_INODE(&folio->page)) {
 					if (is_inode_flag_set(inode,
 								FI_DIRTY_INODE))
-						f2fs_update_inode(inode, &folio->page);
+						f2fs_update_inode(inode, folio);
 					set_dentry_mark(&folio->page,
 						f2fs_need_dentry_mark(sbi, ino));
 				}
@@ -1957,7 +1957,7 @@ static bool flush_dirty_inode(struct folio *folio)
 	if (!inode)
 		return false;
 
-	f2fs_update_inode(inode, &folio->page);
+	f2fs_update_inode(inode, folio);
 	folio_unlock(folio);
 
 	iput(inode);
@@ -2745,7 +2745,7 @@ int f2fs_recover_inline_xattr(struct inode *inode, struct folio *folio)
 	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 	memcpy(dst_addr, src_addr, inline_size);
 update_inode:
-	f2fs_update_inode(inode, &ifolio->page);
+	f2fs_update_inode(inode, ifolio);
 	f2fs_folio_put(ifolio, true);
 	return 0;
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 147/153] f2fs: Pass a folio to set_nid()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (145 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 146/153] f2fs: Pass a folio to f2fs_update_inode() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 148/153] f2fs: Convert dnode_of_data->node_page to node_folio Matthew Wilcox (Oracle)
                   ` (7 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio, so pass it in.  Removes two calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 10 +++++-----
 fs/f2fs/node.h |  8 ++++----
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 152c664f94bf..266f9fb550ea 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -818,7 +818,7 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 				goto release_pages;
 			}
 
-			set_nid(&parent->page, offset[i - 1], nids[i], i == 1);
+			set_nid(parent, offset[i - 1], nids[i], i == 1);
 			f2fs_alloc_nid_done(sbi, nids[i]);
 			done = true;
 		} else if (mode == LOOKUP_NODE_RA && i == level && level > 1) {
@@ -1017,7 +1017,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 			ret = truncate_dnode(&rdn);
 			if (ret < 0)
 				goto out_err;
-			if (set_nid(&folio->page, i, 0, false))
+			if (set_nid(folio, i, 0, false))
 				dn->node_changed = true;
 		}
 	} else {
@@ -1031,7 +1031,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 			rdn.nid = child_nid;
 			ret = truncate_nodes(&rdn, child_nofs, 0, depth - 1);
 			if (ret == (NIDS_PER_BLOCK + 1)) {
-				if (set_nid(&folio->page, i, 0, false))
+				if (set_nid(folio, i, 0, false))
 					dn->node_changed = true;
 				child_nofs += ret;
 			} else if (ret < 0 && ret != -ENOENT) {
@@ -1097,7 +1097,7 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
 		err = truncate_dnode(dn);
 		if (err < 0)
 			goto fail;
-		if (set_nid(&folios[idx]->page, i, 0, false))
+		if (set_nid(folios[idx], i, 0, false))
 			dn->node_changed = true;
 	}
 
@@ -1223,7 +1223,7 @@ int f2fs_truncate_inode_blocks(struct inode *inode, pgoff_t from)
 		if (offset[1] == 0 && get_nid(&folio->page, offset[0], true)) {
 			folio_lock(folio);
 			BUG_ON(folio->mapping != NODE_MAPPING(sbi));
-			set_nid(&folio->page, offset[0], 0, true);
+			set_nid(folio, offset[0], 0, true);
 			folio_unlock(folio);
 		}
 		offset[1] = 0;
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index c58ff16f1227..1446c433b3ec 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -367,17 +367,17 @@ static inline bool IS_DNODE(const struct page *node_page)
 	return true;
 }
 
-static inline int set_nid(struct page *p, int off, nid_t nid, bool i)
+static inline int set_nid(struct folio *folio, int off, nid_t nid, bool i)
 {
-	struct f2fs_node *rn = F2FS_NODE(p);
+	struct f2fs_node *rn = F2FS_NODE(&folio->page);
 
-	f2fs_wait_on_page_writeback(p, NODE, true, true);
+	f2fs_folio_wait_writeback(folio, NODE, true, true);
 
 	if (i)
 		rn->i.i_nid[off - NODE_DIR1_BLOCK] = cpu_to_le32(nid);
 	else
 		rn->in.nid[off] = cpu_to_le32(nid);
-	return set_page_dirty(p);
+	return folio_mark_dirty(folio);
 }
 
 static inline nid_t get_nid(struct page *p, int off, bool i)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 148/153] f2fs: Convert dnode_of_data->node_page to node_folio
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (146 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 147/153] f2fs: Pass a folio to set_nid() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 149/153] f2fs: Pass a folio to get_dnode_addr() Matthew Wilcox (Oracle)
                   ` (6 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All assignments to this struct member are conversions from a folio
so convert it to be a folio and convert all users.  At the same time,
convert data_blkaddr() to take a folio as all callers now have a folio.
Remove eight calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c     | 14 +++++++-------
 fs/f2fs/data.c         | 18 +++++++++---------
 fs/f2fs/extent_cache.c |  2 +-
 fs/f2fs/f2fs.h         | 18 +++++++++---------
 fs/f2fs/file.c         | 32 ++++++++++++++++----------------
 fs/f2fs/gc.c           |  2 +-
 fs/f2fs/node.c         | 22 +++++++++++-----------
 fs/f2fs/recovery.c     | 18 +++++++++---------
 fs/f2fs/segment.c      |  2 +-
 9 files changed, 64 insertions(+), 64 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 9da80914304f..e016b0f96313 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -914,7 +914,7 @@ bool f2fs_sanity_check_cluster(struct dnode_of_data *dn)
 	}
 
 	for (i = 1, count = 1; i < cluster_size; i++, count++) {
-		block_t blkaddr = data_blkaddr(dn->inode, dn->node_page,
+		block_t blkaddr = data_blkaddr(dn->inode, dn->node_folio,
 							dn->ofs_in_node + i);
 
 		/* [COMPR_ADDR, ..., COMPR_ADDR] */
@@ -955,7 +955,7 @@ static int __f2fs_get_cluster_blocks(struct inode *inode,
 	int count, i;
 
 	for (i = 0, count = 0; i < cluster_size; i++) {
-		block_t blkaddr = data_blkaddr(dn->inode, dn->node_page,
+		block_t blkaddr = data_blkaddr(dn->inode, dn->node_folio,
 							dn->ofs_in_node + i);
 
 		if (__is_valid_data_blkaddr(blkaddr))
@@ -1322,7 +1322,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,
 		goto out_unlock_op;
 
 	for (i = 0; i < cc->cluster_size; i++) {
-		if (data_blkaddr(dn.inode, dn.node_page,
+		if (data_blkaddr(dn.inode, dn.node_folio,
 					dn.ofs_in_node + i) == NULL_ADDR)
 			goto out_put_dnode;
 	}
@@ -1354,7 +1354,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,
 				page_folio(cc->rpages[i + 1])->index, cic);
 		fio.compressed_page = cc->cpages[i];
 
-		fio.old_blkaddr = data_blkaddr(dn.inode, dn.node_page,
+		fio.old_blkaddr = data_blkaddr(dn.inode, dn.node_folio,
 						dn.ofs_in_node + i + 1);
 
 		/* wait for GCed page writeback via META_MAPPING */
@@ -1887,14 +1887,14 @@ void f2fs_put_folio_dic(struct folio *folio, bool in_task)
 unsigned int f2fs_cluster_blocks_are_contiguous(struct dnode_of_data *dn,
 						unsigned int ofs_in_node)
 {
-	bool compressed = data_blkaddr(dn->inode, dn->node_page,
+	bool compressed = data_blkaddr(dn->inode, dn->node_folio,
 					ofs_in_node) == COMPRESS_ADDR;
 	int i = compressed ? 1 : 0;
-	block_t first_blkaddr = data_blkaddr(dn->inode, dn->node_page,
+	block_t first_blkaddr = data_blkaddr(dn->inode, dn->node_folio,
 							ofs_in_node + i);
 
 	for (i += 1; i < F2FS_I(dn->inode)->i_cluster_size; i++) {
-		block_t blkaddr = data_blkaddr(dn->inode, dn->node_page,
+		block_t blkaddr = data_blkaddr(dn->inode, dn->node_folio,
 							ofs_in_node + i);
 
 		if (!__is_valid_data_blkaddr(blkaddr))
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index d67731f042cf..f7f5f7bb8ed5 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1117,7 +1117,7 @@ static int f2fs_submit_page_read(struct inode *inode, struct folio *folio,
 
 static void __set_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr)
 {
-	__le32 *addr = get_dnode_addr(dn->inode, dn->node_page);
+	__le32 *addr = get_dnode_addr(dn->inode, &dn->node_folio->page);
 
 	dn->data_blkaddr = blkaddr;
 	addr[dn->ofs_in_node] = cpu_to_le32(dn->data_blkaddr);
@@ -1126,14 +1126,14 @@ static void __set_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr)
 /*
  * Lock ordering for the change of data block address:
  * ->data_page
- *  ->node_page
+ *  ->node_folio
  *    update block addresses in the node page
  */
 void f2fs_set_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr)
 {
-	f2fs_wait_on_page_writeback(dn->node_page, NODE, true, true);
+	f2fs_folio_wait_writeback(dn->node_folio, NODE, true, true);
 	__set_data_blkaddr(dn, blkaddr);
-	if (set_page_dirty(dn->node_page))
+	if (folio_mark_dirty(dn->node_folio))
 		dn->node_changed = true;
 }
 
@@ -1161,7 +1161,7 @@ int f2fs_reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count)
 	trace_f2fs_reserve_new_blocks(dn->inode, dn->nid,
 						dn->ofs_in_node, count);
 
-	f2fs_wait_on_page_writeback(dn->node_page, NODE, true, true);
+	f2fs_folio_wait_writeback(dn->node_folio, NODE, true, true);
 
 	for (; count > 0; dn->ofs_in_node++) {
 		block_t blkaddr = f2fs_data_blkaddr(dn);
@@ -1172,7 +1172,7 @@ int f2fs_reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count)
 		}
 	}
 
-	if (set_page_dirty(dn->node_page))
+	if (folio_mark_dirty(dn->node_folio))
 		dn->node_changed = true;
 	return 0;
 }
@@ -1590,7 +1590,7 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map, int flag)
 	start_pgofs = pgofs;
 	prealloc = 0;
 	last_ofs_in_node = ofs_in_node = dn.ofs_in_node;
-	end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+	end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
 
 next_block:
 	blkaddr = f2fs_data_blkaddr(&dn);
@@ -2247,7 +2247,7 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
 	for (i = 1; i < cc->cluster_size; i++) {
 		block_t blkaddr;
 
-		blkaddr = from_dnode ? data_blkaddr(dn.inode, dn.node_page,
+		blkaddr = from_dnode ? data_blkaddr(dn.inode, dn.node_folio,
 					dn.ofs_in_node + i) :
 					ei.blk + i - 1;
 
@@ -2281,7 +2281,7 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
 		block_t blkaddr;
 		struct bio_post_read_ctx *ctx;
 
-		blkaddr = from_dnode ? data_blkaddr(dn.inode, dn.node_page,
+		blkaddr = from_dnode ? data_blkaddr(dn.inode, dn.node_folio,
 					dn.ofs_in_node + i + 1) :
 					ei.blk + i;
 
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index eabf49beebc1..cfe925a3d555 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -934,7 +934,7 @@ static void __update_extent_cache(struct dnode_of_data *dn, enum extent_type typ
 	if (!__may_extent_tree(dn->inode, type))
 		return;
 
-	ei.fofs = f2fs_start_bidx_of_node(ofs_of_node(dn->node_page), dn->inode) +
+	ei.fofs = f2fs_start_bidx_of_node(ofs_of_node(&dn->node_folio->page), dn->inode) +
 								dn->ofs_in_node;
 	ei.len = 1;
 
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index a94e62c7d892..466462168429 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -995,7 +995,7 @@ struct f2fs_nm_info {
 struct dnode_of_data {
 	struct inode *inode;		/* vfs inode pointer */
 	struct folio *inode_folio;	/* its inode folio, NULL is possible */
-	struct page *node_page;		/* cached direct node page */
+	struct folio *node_folio;	/* cached direct node folio */
 	nid_t nid;			/* node id of the direct node block */
 	unsigned int ofs_in_node;	/* data offset in the node page */
 	bool inode_folio_locked;	/* inode folio is locked or not */
@@ -1011,7 +1011,7 @@ static inline void set_new_dnode(struct dnode_of_data *dn, struct inode *inode,
 	memset(dn, 0, sizeof(*dn));
 	dn->inode = inode;
 	dn->inode_folio = ifolio;
-	dn->node_page = &nfolio->page;
+	dn->node_folio = nfolio;
 	dn->nid = nid;
 }
 
@@ -2890,11 +2890,11 @@ static inline void f2fs_put_page(struct page *page, int unlock)
 
 static inline void f2fs_put_dnode(struct dnode_of_data *dn)
 {
-	if (dn->node_page)
-		f2fs_put_page(dn->node_page, 1);
-	if (dn->inode_folio && dn->node_page != &dn->inode_folio->page)
+	if (dn->node_folio)
+		f2fs_folio_put(dn->node_folio, true);
+	if (dn->inode_folio && dn->node_folio != dn->inode_folio)
 		f2fs_folio_put(dn->inode_folio, false);
-	dn->node_page = NULL;
+	dn->node_folio = NULL;
 	dn->inode_folio = NULL;
 }
 
@@ -3026,14 +3026,14 @@ static inline __le32 *get_dnode_addr(struct inode *inode,
 }
 
 static inline block_t data_blkaddr(struct inode *inode,
-			struct page *node_page, unsigned int offset)
+			struct folio *node_folio, unsigned int offset)
 {
-	return le32_to_cpu(*(get_dnode_addr(inode, node_page) + offset));
+	return le32_to_cpu(*(get_dnode_addr(inode, &node_folio->page) + offset));
 }
 
 static inline block_t f2fs_data_blkaddr(struct dnode_of_data *dn)
 {
-	return data_blkaddr(dn->inode, dn->node_page, dn->ofs_in_node);
+	return data_blkaddr(dn->inode, dn->node_folio, dn->ofs_in_node);
 }
 
 static inline int f2fs_test_bit(unsigned int nr, char *addr)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 004dc7903c1c..e4548d508527 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -404,7 +404,7 @@ static bool __found_offset(struct address_space *mapping,
 	bool compressed_cluster = false;
 
 	if (f2fs_compressed_file(inode)) {
-		block_t first_blkaddr = data_blkaddr(dn->inode, dn->node_page,
+		block_t first_blkaddr = data_blkaddr(dn->inode, dn->node_folio,
 		    ALIGN_DOWN(dn->ofs_in_node, F2FS_I(inode)->i_cluster_size));
 
 		compressed_cluster = first_blkaddr == COMPRESS_ADDR;
@@ -474,7 +474,7 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
 			}
 		}
 
-		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
 
 		/* find data/hole in dnode block */
 		for (; dn.ofs_in_node < end_offset;
@@ -625,7 +625,7 @@ void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
 	block_t blkstart;
 	int blklen = 0;
 
-	addr = get_dnode_addr(dn->inode, dn->node_page) + ofs;
+	addr = get_dnode_addr(dn->inode, &dn->node_folio->page) + ofs;
 	blkstart = le32_to_cpu(*addr);
 
 	/* Assumption: truncation starts with cluster */
@@ -689,7 +689,7 @@ void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
 		 * once we invalidate valid blkaddr in range [ofs, ofs + count],
 		 * we will invalidate all blkaddr in the whole range.
 		 */
-		fofs = f2fs_start_bidx_of_node(ofs_of_node(dn->node_page),
+		fofs = f2fs_start_bidx_of_node(ofs_of_node(&dn->node_folio->page),
 							dn->inode) + ofs;
 		f2fs_update_read_extent_cache_range(dn, fofs, 0, len);
 		f2fs_update_age_extent_cache_range(dn, fofs, len);
@@ -796,12 +796,12 @@ int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 		goto out;
 	}
 
-	count = ADDRS_PER_PAGE(dn.node_page, inode);
+	count = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
 
 	count -= dn.ofs_in_node;
 	f2fs_bug_on(sbi, count < 0);
 
-	if (dn.ofs_in_node || IS_INODE(dn.node_page)) {
+	if (dn.ofs_in_node || IS_INODE(&dn.node_folio->page)) {
 		f2fs_truncate_data_blocks_range(&dn, count);
 		free_from += count;
 	}
@@ -1202,7 +1202,7 @@ int f2fs_truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
 			return err;
 		}
 
-		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
 		count = min(end_offset - dn.ofs_in_node, pg_end - pg_start);
 
 		f2fs_bug_on(F2FS_I_SB(inode), count == 0 || count > end_offset);
@@ -1297,7 +1297,7 @@ static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr,
 		goto next;
 	}
 
-	done = min((pgoff_t)ADDRS_PER_PAGE(dn.node_page, inode) -
+	done = min((pgoff_t)ADDRS_PER_PAGE(&dn.node_folio->page, inode) -
 							dn.ofs_in_node, len);
 	for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) {
 		*blkaddr = f2fs_data_blkaddr(&dn);
@@ -1386,7 +1386,7 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
 			}
 
 			ilen = min((pgoff_t)
-				ADDRS_PER_PAGE(dn.node_page, dst_inode) -
+				ADDRS_PER_PAGE(&dn.node_folio->page, dst_inode) -
 						dn.ofs_in_node, len - i);
 			do {
 				dn.data_blkaddr = f2fs_data_blkaddr(&dn);
@@ -1676,7 +1676,7 @@ static int f2fs_zero_range(struct inode *inode, loff_t offset, loff_t len,
 				goto out;
 			}
 
-			end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+			end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
 			end = min(pg_end, end_offset - dn.ofs_in_node + index);
 
 			ret = f2fs_do_zero_range(&dn, index, end);
@@ -3712,7 +3712,7 @@ static int release_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
 	int i;
 
 	for (i = 0; i < count; i++) {
-		blkaddr = data_blkaddr(dn->inode, dn->node_page,
+		blkaddr = data_blkaddr(dn->inode, dn->node_folio,
 						dn->ofs_in_node + i);
 
 		if (!__is_valid_data_blkaddr(blkaddr))
@@ -3830,7 +3830,7 @@ static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg)
 			break;
 		}
 
-		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
 		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
 		count = round_up(count, fi->i_cluster_size);
 
@@ -3881,7 +3881,7 @@ static int reserve_compress_blocks(struct dnode_of_data *dn, pgoff_t count,
 	int i;
 
 	for (i = 0; i < count; i++) {
-		blkaddr = data_blkaddr(dn->inode, dn->node_page,
+		blkaddr = data_blkaddr(dn->inode, dn->node_folio,
 						dn->ofs_in_node + i);
 
 		if (!__is_valid_data_blkaddr(blkaddr))
@@ -3898,7 +3898,7 @@ static int reserve_compress_blocks(struct dnode_of_data *dn, pgoff_t count,
 		int ret;
 
 		for (i = 0; i < cluster_size; i++) {
-			blkaddr = data_blkaddr(dn->inode, dn->node_page,
+			blkaddr = data_blkaddr(dn->inode, dn->node_folio,
 						dn->ofs_in_node + i);
 
 			if (i == 0) {
@@ -4008,7 +4008,7 @@ static int f2fs_reserve_compress_blocks(struct file *filp, unsigned long arg)
 			break;
 		}
 
-		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
 		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
 		count = round_up(count, fi->i_cluster_size);
 
@@ -4172,7 +4172,7 @@ static int f2fs_sec_trim_file(struct file *filp, unsigned long arg)
 			goto out;
 		}
 
-		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
 		count = min(end_offset - dn.ofs_in_node, pg_end - index);
 		for (i = 0; i < count; i++, index++, dn.ofs_in_node++) {
 			struct block_device *cur_bdev;
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index b18fecd2c352..b82aecaf6f29 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1178,7 +1178,7 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	}
 
 	*nofs = ofs_of_node(&node_folio->page);
-	source_blkaddr = data_blkaddr(NULL, &node_folio->page, ofs_in_node);
+	source_blkaddr = data_blkaddr(NULL, node_folio, ofs_in_node);
 	f2fs_folio_put(node_folio, true);
 
 	if (source_blkaddr != blkaddr) {
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 266f9fb550ea..8f5231c9eea0 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -851,7 +851,7 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 	}
 	dn->nid = nids[level];
 	dn->ofs_in_node = offset[level];
-	dn->node_page = &nfolio[level]->page;
+	dn->node_folio = nfolio[level];
 	dn->data_blkaddr = f2fs_data_blkaddr(dn);
 
 	if (is_inode_flag_set(dn->inode, FI_COMPRESSED_FILE) &&
@@ -872,9 +872,9 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 		if (!c_len)
 			goto out;
 
-		blkaddr = data_blkaddr(dn->inode, dn->node_page, ofs_in_node);
+		blkaddr = data_blkaddr(dn->inode, dn->node_folio, ofs_in_node);
 		if (blkaddr == COMPRESS_ADDR)
-			blkaddr = data_blkaddr(dn->inode, dn->node_page,
+			blkaddr = data_blkaddr(dn->inode, dn->node_folio,
 						ofs_in_node + 1);
 
 		f2fs_update_read_extent_tree_range_compressed(dn->inode,
@@ -889,7 +889,7 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 		f2fs_folio_put(nfolio[0], false);
 release_out:
 	dn->inode_folio = NULL;
-	dn->node_page = NULL;
+	dn->node_folio = NULL;
 	if (err == -ENOENT) {
 		dn->cur_level = i;
 		dn->max_level = level;
@@ -930,16 +930,16 @@ static int truncate_node(struct dnode_of_data *dn)
 		f2fs_inode_synced(dn->inode);
 	}
 
-	clear_node_page_dirty(dn->node_page);
+	clear_node_page_dirty(&dn->node_folio->page);
 	set_sbi_flag(sbi, SBI_IS_DIRTY);
 
-	index = page_folio(dn->node_page)->index;
-	f2fs_put_page(dn->node_page, 1);
+	index = dn->node_folio->index;
+	f2fs_folio_put(dn->node_folio, true);
 
 	invalidate_mapping_pages(NODE_MAPPING(sbi),
 			index, index);
 
-	dn->node_page = NULL;
+	dn->node_folio = NULL;
 	trace_f2fs_truncate_node(dn->inode, dn->nid, ni.blk_addr);
 
 	return 0;
@@ -971,7 +971,7 @@ static int truncate_dnode(struct dnode_of_data *dn)
 	}
 
 	/* Make dnode_of_data for parameter */
-	dn->node_page = &folio->page;
+	dn->node_folio = folio;
 	dn->ofs_in_node = 0;
 	f2fs_truncate_data_blocks_range(dn, ADDRS_PER_BLOCK(dn->inode));
 	err = truncate_node(dn);
@@ -1043,7 +1043,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 
 	if (!ofs) {
 		/* remove current indirect node */
-		dn->node_page = &folio->page;
+		dn->node_folio = folio;
 		ret = truncate_node(dn);
 		if (ret)
 			goto out_err;
@@ -1102,7 +1102,7 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
 	}
 
 	if (offset[idx + 1] == 0) {
-		dn->node_page = &folios[idx]->page;
+		dn->node_folio = folios[idx];
 		dn->nid = nid[idx];
 		err = truncate_node(dn);
 		if (err)
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index bc7041d82dc5..51ebed4e1521 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -527,7 +527,7 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 	nid = le32_to_cpu(sum.nid);
 	ofs_in_node = le16_to_cpu(sum.ofs_in_node);
 
-	max_addrs = ADDRS_PER_PAGE(dn->node_page, dn->inode);
+	max_addrs = ADDRS_PER_PAGE(&dn->node_folio->page, dn->inode);
 	if (ofs_in_node >= max_addrs) {
 		f2fs_err(sbi, "Inconsistent ofs_in_node:%u in summary, ino:%lu, nid:%u, max:%u",
 			ofs_in_node, dn->inode->i_ino, nid, max_addrs);
@@ -539,7 +539,7 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 		tdn.nid = nid;
 		if (!dn->inode_folio_locked)
 			folio_lock(dn->inode_folio);
-		tdn.node_page = &dn->inode_folio->page;
+		tdn.node_folio = dn->inode_folio;
 		tdn.ofs_in_node = ofs_in_node;
 		goto truncate_out;
 	} else if (dn->nid == nid) {
@@ -662,7 +662,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 		goto out;
 	}
 
-	f2fs_wait_on_page_writeback(dn.node_page, NODE, true, true);
+	f2fs_folio_wait_writeback(dn.node_folio, NODE, true, true);
 
 	err = f2fs_get_node_info(sbi, dn.nid, &ni, false);
 	if (err)
@@ -670,9 +670,9 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 
 	f2fs_bug_on(sbi, ni.ino != ino_of_node(&folio->page));
 
-	if (ofs_of_node(dn.node_page) != ofs_of_node(&folio->page)) {
+	if (ofs_of_node(&dn.node_folio->page) != ofs_of_node(&folio->page)) {
 		f2fs_warn(sbi, "Inconsistent ofs_of_node, ino:%lu, ofs:%u, %u",
-			  inode->i_ino, ofs_of_node(dn.node_page),
+			  inode->i_ino, ofs_of_node(&dn.node_folio->page),
 			  ofs_of_node(&folio->page));
 		err = -EFSCORRUPTED;
 		f2fs_handle_error(sbi, ERROR_INCONSISTENT_FOOTER);
@@ -683,7 +683,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 		block_t src, dest;
 
 		src = f2fs_data_blkaddr(&dn);
-		dest = data_blkaddr(dn.inode, &folio->page, dn.ofs_in_node);
+		dest = data_blkaddr(dn.inode, folio, dn.ofs_in_node);
 
 		if (__is_valid_data_blkaddr(src) &&
 			!f2fs_is_valid_blkaddr(sbi, src, META_POR)) {
@@ -758,10 +758,10 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 		}
 	}
 
-	copy_node_footer(dn.node_page, &folio->page);
-	fill_node_footer(dn.node_page, dn.nid, ni.ino,
+	copy_node_footer(&dn.node_folio->page, &folio->page);
+	fill_node_footer(&dn.node_folio->page, dn.nid, ni.ino,
 					ofs_of_node(&folio->page), false);
-	set_page_dirty(dn.node_page);
+	folio_mark_dirty(dn.node_folio);
 err:
 	f2fs_put_dnode(&dn);
 out:
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 49cb5d282c45..0c99c191f218 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -334,7 +334,7 @@ static int __f2fs_commit_atomic_write(struct inode *inode)
 			goto next;
 		}
 
-		blen = min((pgoff_t)ADDRS_PER_PAGE(dn.node_page, cow_inode),
+		blen = min((pgoff_t)ADDRS_PER_PAGE(&dn.node_folio->page, cow_inode),
 				len);
 		index = off;
 		for (i = 0; i < blen; i++, dn.ofs_in_node++, index++) {
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 149/153] f2fs: Pass a folio to get_dnode_addr()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (147 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 148/153] f2fs: Convert dnode_of_data->node_page to node_folio Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 150/153] f2fs: Convert fsync_node_entry->page to folio Matthew Wilcox (Oracle)
                   ` (5 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers except __get_inode_rdev() and __set_inode_rdev() now have a
folio, but the only callers of those two functions do have a folio, so
pass the folio to them and then into get_dnode_addr().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c  |  2 +-
 fs/f2fs/f2fs.h  | 10 +++++-----
 fs/f2fs/file.c  |  2 +-
 fs/f2fs/inode.c | 12 ++++++------
 4 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index f7f5f7bb8ed5..96afaf962fd0 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1117,7 +1117,7 @@ static int f2fs_submit_page_read(struct inode *inode, struct folio *folio,
 
 static void __set_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr)
 {
-	__le32 *addr = get_dnode_addr(dn->inode, &dn->node_folio->page);
+	__le32 *addr = get_dnode_addr(dn->inode, dn->node_folio);
 
 	dn->data_blkaddr = blkaddr;
 	addr[dn->ofs_in_node] = cpu_to_le32(dn->data_blkaddr);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 466462168429..2ab1ff3dd4cb 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3019,16 +3019,16 @@ static inline unsigned int get_dnode_base(struct inode *inode,
 }
 
 static inline __le32 *get_dnode_addr(struct inode *inode,
-					struct page *node_page)
+					struct folio *node_folio)
 {
-	return blkaddr_in_node(F2FS_NODE(node_page)) +
-			get_dnode_base(inode, node_page);
+	return blkaddr_in_node(F2FS_NODE(&node_folio->page)) +
+			get_dnode_base(inode, &node_folio->page);
 }
 
 static inline block_t data_blkaddr(struct inode *inode,
 			struct folio *node_folio, unsigned int offset)
 {
-	return le32_to_cpu(*(get_dnode_addr(inode, &node_folio->page) + offset));
+	return le32_to_cpu(*(get_dnode_addr(inode, node_folio) + offset));
 }
 
 static inline block_t f2fs_data_blkaddr(struct dnode_of_data *dn)
@@ -3395,7 +3395,7 @@ static inline bool f2fs_is_cow_file(struct inode *inode)
 
 static inline void *inline_data_addr(struct inode *inode, struct folio *folio)
 {
-	__le32 *addr = get_dnode_addr(inode, &folio->page);
+	__le32 *addr = get_dnode_addr(inode, folio);
 
 	return (void *)(addr + DEF_INLINE_RESERVED_SIZE);
 }
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index e4548d508527..401feb951a8b 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -625,7 +625,7 @@ void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
 	block_t blkstart;
 	int blklen = 0;
 
-	addr = get_dnode_addr(dn->inode, &dn->node_folio->page) + ofs;
+	addr = get_dnode_addr(dn->inode, dn->node_folio) + ofs;
 	blkstart = le32_to_cpu(*addr);
 
 	/* Assumption: truncation starts with cluster */
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 201e3d2a9adf..b5f60373f6f6 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -66,9 +66,9 @@ void f2fs_set_inode_flags(struct inode *inode)
 			S_ENCRYPTED|S_VERITY|S_CASEFOLD);
 }
 
-static void __get_inode_rdev(struct inode *inode, struct page *node_page)
+static void __get_inode_rdev(struct inode *inode, struct folio *node_folio)
 {
-	__le32 *addr = get_dnode_addr(inode, node_page);
+	__le32 *addr = get_dnode_addr(inode, node_folio);
 
 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
 			S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
@@ -79,9 +79,9 @@ static void __get_inode_rdev(struct inode *inode, struct page *node_page)
 	}
 }
 
-static void __set_inode_rdev(struct inode *inode, struct page *node_page)
+static void __set_inode_rdev(struct inode *inode, struct folio *node_folio)
 {
-	__le32 *addr = get_dnode_addr(inode, node_page);
+	__le32 *addr = get_dnode_addr(inode, node_folio);
 
 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
 		if (old_valid_dev(inode->i_rdev)) {
@@ -481,7 +481,7 @@ static int do_read_inode(struct inode *inode)
 	}
 
 	/* get rdev by using inline_info */
-	__get_inode_rdev(inode, &node_folio->page);
+	__get_inode_rdev(inode, node_folio);
 
 	if (!f2fs_need_inode_block_update(sbi, inode->i_ino))
 		fi->last_disk_size = inode->i_size;
@@ -737,7 +737,7 @@ void f2fs_update_inode(struct inode *inode, struct folio *node_folio)
 		}
 	}
 
-	__set_inode_rdev(inode, &node_folio->page);
+	__set_inode_rdev(inode, node_folio);
 
 	/* deleted inode */
 	if (inode->i_nlink == 0)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 150/153] f2fs: Convert fsync_node_entry->page to folio
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (148 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 149/153] f2fs: Pass a folio to get_dnode_addr() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 151/153] f2fs: Remove f2fs_new_node_page() Matthew Wilcox (Oracle)
                   ` (4 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert all callers to set/get a folio instead of a page.  Removes
five calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/data.c    |  2 +-
 fs/f2fs/f2fs.h    |  4 ++--
 fs/f2fs/node.c    | 25 +++++++++++++------------
 fs/f2fs/segment.c |  2 +-
 4 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 96afaf962fd0..e112c8356e21 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -359,7 +359,7 @@ static void f2fs_write_end_io(struct bio *bio)
 
 		dec_page_count(sbi, type);
 		if (f2fs_in_warm_node_list(sbi, folio))
-			f2fs_del_fsync_node_entry(sbi, &folio->page);
+			f2fs_del_fsync_node_entry(sbi, folio);
 		clear_page_private_gcing(&folio->page);
 		folio_end_writeback(folio);
 	}
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 2ab1ff3dd4cb..768f5fd9b45d 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -317,7 +317,7 @@ struct inode_entry {
 
 struct fsync_node_entry {
 	struct list_head list;	/* list head */
-	struct page *page;	/* warm node page pointer */
+	struct folio *folio;	/* warm node folio pointer */
 	unsigned int seq_id;	/* sequence id */
 };
 
@@ -3721,7 +3721,7 @@ bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type);
 bool f2fs_in_warm_node_list(struct f2fs_sb_info *sbi,
 		const struct folio *folio);
 void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi);
-void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct page *page);
+void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct folio *folio);
 void f2fs_reset_fsync_node_info(struct f2fs_sb_info *sbi);
 int f2fs_need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid);
 bool f2fs_is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 8f5231c9eea0..f95a922c4936 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -325,7 +325,7 @@ void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi)
 }
 
 static unsigned int f2fs_add_fsync_node_entry(struct f2fs_sb_info *sbi,
-							struct page *page)
+		struct folio *folio)
 {
 	struct fsync_node_entry *fn;
 	unsigned long flags;
@@ -334,8 +334,8 @@ static unsigned int f2fs_add_fsync_node_entry(struct f2fs_sb_info *sbi,
 	fn = f2fs_kmem_cache_alloc(fsync_node_entry_slab,
 					GFP_NOFS, true, NULL);
 
-	get_page(page);
-	fn->page = page;
+	folio_get(folio);
+	fn->folio = folio;
 	INIT_LIST_HEAD(&fn->list);
 
 	spin_lock_irqsave(&sbi->fsync_node_lock, flags);
@@ -348,19 +348,19 @@ static unsigned int f2fs_add_fsync_node_entry(struct f2fs_sb_info *sbi,
 	return seq_id;
 }
 
-void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct page *page)
+void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct folio *folio)
 {
 	struct fsync_node_entry *fn;
 	unsigned long flags;
 
 	spin_lock_irqsave(&sbi->fsync_node_lock, flags);
 	list_for_each_entry(fn, &sbi->fsync_node_list, list) {
-		if (fn->page == page) {
+		if (fn->folio == folio) {
 			list_del(&fn->list);
 			sbi->fsync_node_num--;
 			spin_unlock_irqrestore(&sbi->fsync_node_lock, flags);
 			kmem_cache_free(fsync_node_entry_slab, fn);
-			put_page(page);
+			folio_put(folio);
 			return;
 		}
 	}
@@ -1729,7 +1729,7 @@ static int __write_node_folio(struct folio *folio, bool atomic, bool *submitted,
 
 	/* should add to global list before clearing PAGECACHE status */
 	if (f2fs_in_warm_node_list(sbi, folio)) {
-		seq = f2fs_add_fsync_node_entry(sbi, &folio->page);
+		seq = f2fs_add_fsync_node_entry(sbi, folio);
 		if (seq_id)
 			*seq_id = seq;
 	}
@@ -2131,12 +2131,13 @@ int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi,
 						unsigned int seq_id)
 {
 	struct fsync_node_entry *fn;
-	struct page *page;
 	struct list_head *head = &sbi->fsync_node_list;
 	unsigned long flags;
 	unsigned int cur_seq_id = 0;
 
 	while (seq_id && cur_seq_id < seq_id) {
+		struct folio *folio;
+
 		spin_lock_irqsave(&sbi->fsync_node_lock, flags);
 		if (list_empty(head)) {
 			spin_unlock_irqrestore(&sbi->fsync_node_lock, flags);
@@ -2148,13 +2149,13 @@ int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi,
 			break;
 		}
 		cur_seq_id = fn->seq_id;
-		page = fn->page;
-		get_page(page);
+		folio = fn->folio;
+		folio_get(folio);
 		spin_unlock_irqrestore(&sbi->fsync_node_lock, flags);
 
-		f2fs_wait_on_page_writeback(page, NODE, true, false);
+		f2fs_folio_wait_writeback(folio, NODE, true, false);
 
-		put_page(page);
+		folio_put(folio);
 	}
 
 	return filemap_check_errors(NODE_MAPPING(sbi));
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 0c99c191f218..f3d8501e8cbd 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -3918,7 +3918,7 @@ static void do_write_page(struct f2fs_summary *sum, struct f2fs_io_info *fio)
 			fscrypt_finalize_bounce_page(&fio->encrypted_page);
 		folio_end_writeback(folio);
 		if (f2fs_in_warm_node_list(fio->sbi, folio))
-			f2fs_del_fsync_node_entry(fio->sbi, fio->page);
+			f2fs_del_fsync_node_entry(fio->sbi, folio);
 		goto out;
 	}
 	if (GET_SEGNO(fio->sbi, fio->old_blkaddr) != NULL_SEGNO)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 151/153] f2fs: Remove f2fs_new_node_page()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (149 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 150/153] f2fs: Convert fsync_node_entry->page to folio Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 152/153] f2fs: Use a folio in flush_inline_data() Matthew Wilcox (Oracle)
                   ` (3 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers now use f2fs_new_node_folio().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h | 6 ------
 fs/f2fs/node.c | 4 ++--
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 768f5fd9b45d..b546c720cf03 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3765,12 +3765,6 @@ void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi);
 int __init f2fs_create_node_manager_caches(void);
 void f2fs_destroy_node_manager_caches(void);
 
-static inline
-struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
-{
-	return &f2fs_new_node_folio(dn, ofs)->page;
-}
-
 /*
  * segment.c
  */
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index f95a922c4936..53ad48075eb5 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1351,7 +1351,7 @@ struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs)
 		dec_valid_node_count(sbi, dn->inode, !ofs);
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_warn_ratelimited(sbi,
-			"f2fs_new_node_page: inconsistent nat entry, "
+			"f2fs_new_node_folio: inconsistent nat entry, "
 			"ino:%u, nid:%u, blkaddr:%u, ver:%u, flag:%u",
 			new_ni.ino, new_ni.nid, new_ni.blk_addr,
 			new_ni.version, new_ni.flag);
@@ -2356,7 +2356,7 @@ static bool add_free_nid(struct f2fs_sb_info *sbi,
 		 *  - f2fs_add_link
 		 *   - f2fs_init_inode_metadata
 		 *    - f2fs_new_inode_folio
-		 *     - f2fs_new_node_page
+		 *     - f2fs_new_node_folio
 		 *      - set_node_addr
 		 *  - f2fs_alloc_nid_done
 		 *   - __remove_nid_from_list(PREALLOC_NID)
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 152/153] f2fs: Use a folio in flush_inline_data()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (150 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 151/153] f2fs: Remove f2fs_new_node_page() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 153/153] f2fs: Convert clear_node_page_dirty() to clear_node_folio_dirty() Matthew Wilcox (Oracle)
                   ` (2 subsequent siblings)
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get a folio from the page cache and use it throughout.  Removes
six calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 53ad48075eb5..753ecca6d511 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1563,7 +1563,7 @@ static struct folio *f2fs_get_node_folio_ra(struct folio *parent, int start)
 static void flush_inline_data(struct f2fs_sb_info *sbi, nid_t ino)
 {
 	struct inode *inode;
-	struct page *page;
+	struct folio *folio;
 	int ret;
 
 	/* should flush inline_data before evict_inode */
@@ -1571,27 +1571,27 @@ static void flush_inline_data(struct f2fs_sb_info *sbi, nid_t ino)
 	if (!inode)
 		return;
 
-	page = f2fs_pagecache_get_page(inode->i_mapping, 0,
+	folio = f2fs_filemap_get_folio(inode->i_mapping, 0,
 					FGP_LOCK|FGP_NOWAIT, 0);
-	if (!page)
+	if (IS_ERR(folio))
 		goto iput_out;
 
-	if (!PageUptodate(page))
-		goto page_out;
+	if (!folio_test_uptodate(folio))
+		goto folio_out;
 
-	if (!PageDirty(page))
-		goto page_out;
+	if (!folio_test_dirty(folio))
+		goto folio_out;
 
-	if (!clear_page_dirty_for_io(page))
-		goto page_out;
+	if (!folio_clear_dirty_for_io(folio))
+		goto folio_out;
 
-	ret = f2fs_write_inline_data(inode, page_folio(page));
+	ret = f2fs_write_inline_data(inode, folio);
 	inode_dec_dirty_pages(inode);
 	f2fs_remove_dirty_inode(inode);
 	if (ret)
-		set_page_dirty(page);
-page_out:
-	f2fs_put_page(page, 1);
+		folio_mark_dirty(folio);
+folio_out:
+	f2fs_folio_put(folio, true);
 iput_out:
 	iput(inode);
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* [f2fs-dev] [PATCH 153/153] f2fs: Convert clear_node_page_dirty() to clear_node_folio_dirty()
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (151 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 152/153] f2fs: Use a folio in flush_inline_data() Matthew Wilcox (Oracle)
@ 2025-03-31 20:12 ` Matthew Wilcox (Oracle)
  2025-04-28  7:17 ` [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Chao Yu via Linux-f2fs-devel
  2025-04-28 22:40 ` patchwork-bot+f2fs--- via Linux-f2fs-devel
  154 siblings, 0 replies; 164+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-03-31 20:12 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Both callers have a folio so pass it in, removing five calls to
compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/node.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 753ecca6d511..5232e43db779 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -120,14 +120,14 @@ bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type)
 	return res;
 }
 
-static void clear_node_page_dirty(struct page *page)
+static void clear_node_folio_dirty(struct folio *folio)
 {
-	if (PageDirty(page)) {
-		f2fs_clear_page_cache_dirty_tag(page_folio(page));
-		clear_page_dirty_for_io(page);
-		dec_page_count(F2FS_P_SB(page), F2FS_DIRTY_NODES);
+	if (folio_test_dirty(folio)) {
+		f2fs_clear_page_cache_dirty_tag(folio);
+		folio_clear_dirty_for_io(folio);
+		dec_page_count(F2FS_F_SB(folio), F2FS_DIRTY_NODES);
 	}
-	ClearPageUptodate(page);
+	folio_clear_uptodate(folio);
 }
 
 static struct folio *get_current_nat_folio(struct f2fs_sb_info *sbi, nid_t nid)
@@ -930,7 +930,7 @@ static int truncate_node(struct dnode_of_data *dn)
 		f2fs_inode_synced(dn->inode);
 	}
 
-	clear_node_page_dirty(&dn->node_folio->page);
+	clear_node_folio_dirty(dn->node_folio);
 	set_sbi_flag(sbi, SBI_IS_DIRTY);
 
 	index = dn->node_folio->index;
@@ -1381,7 +1381,7 @@ struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs)
 		inc_valid_inode_count(sbi);
 	return folio;
 fail:
-	clear_node_page_dirty(&folio->page);
+	clear_node_folio_dirty(folio);
 	f2fs_folio_put(folio, true);
 	return ERR_PTR(err);
 }
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 003/153] f2fs: Introduce fio_inode()
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 003/153] f2fs: Introduce fio_inode() Matthew Wilcox (Oracle)
@ 2025-04-15 19:22   ` Jaegeuk Kim via Linux-f2fs-devel
  0 siblings, 0 replies; 164+ messages in thread
From: Jaegeuk Kim via Linux-f2fs-devel @ 2025-04-15 19:22 UTC (permalink / raw)
  To: Matthew Wilcox (Oracle); +Cc: linux-f2fs-devel

Hi Matthew,

I had to apply this in this patch, since fio can be reassigned after
checking fio->in_list check.

--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -946,7 +946,6 @@ static bool is_end_zone_blkaddr(struct f2fs_sb_info *sbi, block_t blkaddr)

 void f2fs_submit_page_write(struct f2fs_io_info *fio)
 {
-       struct inode *inode = fio_inode(fio);
        struct f2fs_sb_info *sbi = fio->sbi;
        enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
        struct f2fs_bio_info *io = sbi->write_io[btype] + fio->temp;
@@ -996,13 +995,13 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
        if (io->bio &&
            (!io_is_mergeable(sbi, io->bio, io, fio, io->last_block_in_bio,
                              fio->new_blkaddr) ||
-            !f2fs_crypt_mergeable_bio(io->bio, inode,
+            !f2fs_crypt_mergeable_bio(io->bio, fio_inode(fio),
                                page_folio(bio_page)->index, fio)))
                __submit_merged_bio(io);
 alloc_new:
        if (io->bio == NULL) {
                io->bio = __bio_alloc(fio, BIO_MAX_VECS);
-               f2fs_set_bio_crypt_ctx(io->bio, inode,
+               f2fs_set_bio_crypt_ctx(io->bio, fio_inode(fio),
                                page_folio(bio_page)->index, fio, GFP_NOIO);
                io->fio = *fio;
        }

On 03/31, Matthew Wilcox (Oracle) wrote:
> This helper returns the inode associated with the f2fs_io_info.  That's a
> relatively common thing to want, mildly awkward to get and provides one
> place to change if we decide to record it directly, or change fio->page
> to fio->folio.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
>  fs/f2fs/data.c    | 9 +++++----
>  fs/f2fs/f2fs.h    | 5 +++++
>  fs/f2fs/segment.c | 6 +++---
>  3 files changed, 13 insertions(+), 7 deletions(-)
> 
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index 54f89f0ee69b..597d1e82cb55 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -946,6 +946,7 @@ static bool is_end_zone_blkaddr(struct f2fs_sb_info *sbi, block_t blkaddr)
>  
>  void f2fs_submit_page_write(struct f2fs_io_info *fio)
>  {
> +	struct inode *inode = fio_inode(fio);
>  	struct f2fs_sb_info *sbi = fio->sbi;
>  	enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
>  	struct f2fs_bio_info *io = sbi->write_io[btype] + fio->temp;
> @@ -995,13 +996,13 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
>  	if (io->bio &&
>  	    (!io_is_mergeable(sbi, io->bio, io, fio, io->last_block_in_bio,
>  			      fio->new_blkaddr) ||
> -	     !f2fs_crypt_mergeable_bio(io->bio, fio->page->mapping->host,
> +	     !f2fs_crypt_mergeable_bio(io->bio, inode,
>  				page_folio(bio_page)->index, fio)))
>  		__submit_merged_bio(io);
>  alloc_new:
>  	if (io->bio == NULL) {
>  		io->bio = __bio_alloc(fio, BIO_MAX_VECS);
> -		f2fs_set_bio_crypt_ctx(io->bio, fio->page->mapping->host,
> +		f2fs_set_bio_crypt_ctx(io->bio, inode,
>  				page_folio(bio_page)->index, fio, GFP_NOIO);
>  		io->fio = *fio;
>  	}
> @@ -2501,7 +2502,7 @@ static void f2fs_readahead(struct readahead_control *rac)
>  
>  int f2fs_encrypt_one_page(struct f2fs_io_info *fio)
>  {
> -	struct inode *inode = fio->page->mapping->host;
> +	struct inode *inode = fio_inode(fio);
>  	struct page *mpage, *page;
>  	gfp_t gfp_flags = GFP_NOFS;
>  
> @@ -2631,7 +2632,7 @@ bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio)
>  
>  static inline bool need_inplace_update(struct f2fs_io_info *fio)
>  {
> -	struct inode *inode = fio->page->mapping->host;
> +	struct inode *inode = fio_inode(fio);
>  
>  	if (f2fs_should_update_outplace(inode, fio))
>  		return false;
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index f1576dc6ec67..c37092e82354 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -3858,6 +3858,11 @@ unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
>  unsigned long long f2fs_get_section_mtime(struct f2fs_sb_info *sbi,
>  			unsigned int segno);
>  
> +static inline struct inode *fio_inode(struct f2fs_io_info *fio)
> +{
> +	return page_folio(fio->page)->mapping->host;
> +}
> +
>  #define DEF_FRAGMENT_SIZE	4
>  #define MIN_FRAGMENT_SIZE	1
>  #define MAX_FRAGMENT_SIZE	512
> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
> index 396ef71f41e3..d2f2f68da098 100644
> --- a/fs/f2fs/segment.c
> +++ b/fs/f2fs/segment.c
> @@ -3584,7 +3584,7 @@ static int __get_segment_type_2(struct f2fs_io_info *fio)
>  static int __get_segment_type_4(struct f2fs_io_info *fio)
>  {
>  	if (fio->type == DATA) {
> -		struct inode *inode = fio->page->mapping->host;
> +		struct inode *inode = fio_inode(fio);
>  
>  		if (S_ISDIR(inode->i_mode))
>  			return CURSEG_HOT_DATA;
> @@ -3618,7 +3618,7 @@ static int __get_age_segment_type(struct inode *inode, pgoff_t pgofs)
>  static int __get_segment_type_6(struct f2fs_io_info *fio)
>  {
>  	if (fio->type == DATA) {
> -		struct inode *inode = fio->page->mapping->host;
> +		struct inode *inode = fio_inode(fio);
>  		int type;
>  
>  		if (is_inode_flag_set(inode, FI_ALIGNED_WRITE))
> @@ -4023,7 +4023,7 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio)
>  	if (!err) {
>  		f2fs_update_device_state(fio->sbi, fio->ino,
>  						fio->new_blkaddr, 1);
> -		f2fs_update_iostat(fio->sbi, fio->page->mapping->host,
> +		f2fs_update_iostat(fio->sbi, fio_inode(fio),
>  						fio->io_type, F2FS_BLKSIZE);
>  	}
>  
> -- 
> 2.47.2


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 008/153] f2fs: Use a folio in move_data_block()
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 008/153] f2fs: Use a folio in move_data_block() Matthew Wilcox (Oracle)
@ 2025-04-27  9:31   ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 164+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-04-27  9:31 UTC (permalink / raw)
  To: Matthew Wilcox (Oracle), Jaegeuk Kim; +Cc: linux-f2fs-devel

On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote:
> Fetch a folio from the pagecache instead of a page and operate on it
> throughout.  Removes eight calls to compound_head() and an access to
> page->mapping.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
>  fs/f2fs/gc.c | 33 +++++++++++++++++----------------
>  1 file changed, 17 insertions(+), 16 deletions(-)
> 
> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
> index 2b8f9239bede..fa51b871290d 100644
> --- a/fs/f2fs/gc.c
> +++ b/fs/f2fs/gc.c
> @@ -1307,7 +1307,8 @@ static int move_data_block(struct inode *inode, block_t bidx,
>  	struct dnode_of_data dn;
>  	struct f2fs_summary sum;
>  	struct node_info ni;
> -	struct page *page, *mpage;
> +	struct page *page;
> +	struct folio *mfolio;
>  	block_t newaddr;
>  	int err = 0;
>  	bool lfs_mode = f2fs_lfs_mode(fio.sbi);
> @@ -1359,20 +1360,20 @@ static int move_data_block(struct inode *inode, block_t bidx,
>  	if (lfs_mode)
>  		f2fs_down_write(&fio.sbi->io_order_lock);
>  
> -	mpage = f2fs_grab_cache_page(META_MAPPING(fio.sbi),
> +	mfolio = f2fs_grab_cache_folio(META_MAPPING(fio.sbi),
>  					fio.old_blkaddr, false);
> -	if (!mpage) {
> -		err = -ENOMEM;
> +	if (IS_ERR(mfolio)) {
> +		err = PTR_ERR(mfolio);
>  		goto up_out;
>  	}
>  
> -	fio.encrypted_page = mpage;
> +	fio.encrypted_page = folio_file_page(mfolio, fio.old_blkaddr);
>  
> -	/* read source block in mpage */
> -	if (!PageUptodate(mpage)) {
> +	/* read source block in mfolio */
> +	if (!folio_test_uptodate(mfolio)) {
>  		err = f2fs_submit_page_bio(&fio);
>  		if (err) {
> -			f2fs_put_page(mpage, 1);
> +			f2fs_folio_put(mfolio, true);
>  			goto up_out;
>  		}
>  
> @@ -1381,11 +1382,11 @@ static int move_data_block(struct inode *inode, block_t bidx,
>  		f2fs_update_iostat(fio.sbi, NULL, FS_GDATA_READ_IO,
>  							F2FS_BLKSIZE);
>  
> -		lock_page(mpage);
> -		if (unlikely(mpage->mapping != META_MAPPING(fio.sbi) ||
> -						!PageUptodate(mpage))) {
> +		folio_lock(mfolio);
> +		if (unlikely(mfolio->mapping != META_MAPPING(fio.sbi) ||
> +			     !folio_test_uptodate(mfolio))) {
>  			err = -EIO;
> -			f2fs_put_page(mpage, 1);
> +			f2fs_folio_put(mfolio, 1);

f2fs_folio_put(mfolio, true);

Thanks,

>  			goto up_out;
>  		}
>  	}
> @@ -1396,7 +1397,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
>  	err = f2fs_allocate_data_block(fio.sbi, NULL, fio.old_blkaddr, &newaddr,
>  				&sum, type, NULL);
>  	if (err) {
> -		f2fs_put_page(mpage, 1);
> +		f2fs_folio_put(mfolio, true);
>  		/* filesystem should shutdown, no need to recovery block */
>  		goto up_out;
>  	}
> @@ -1405,15 +1406,15 @@ static int move_data_block(struct inode *inode, block_t bidx,
>  				newaddr, FGP_LOCK | FGP_CREAT, GFP_NOFS);
>  	if (!fio.encrypted_page) {
>  		err = -ENOMEM;
> -		f2fs_put_page(mpage, 1);
> +		f2fs_folio_put(mfolio, true);
>  		goto recover_block;
>  	}
>  
>  	/* write target block */
>  	f2fs_wait_on_page_writeback(fio.encrypted_page, DATA, true, true);
>  	memcpy(page_address(fio.encrypted_page),
> -				page_address(mpage), PAGE_SIZE);
> -	f2fs_put_page(mpage, 1);
> +				folio_address(mfolio), PAGE_SIZE);
> +	f2fs_folio_put(mfolio, true);
>  
>  	f2fs_invalidate_internal_cache(fio.sbi, fio.old_blkaddr, 1);
>  



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 009/153] f2fs: Use a folio in f2fs_quota_read()
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 009/153] f2fs: Use a folio in f2fs_quota_read() Matthew Wilcox (Oracle)
@ 2025-04-27 11:02   ` Chao Yu via Linux-f2fs-devel
  2025-04-28 15:22     ` Jaegeuk Kim via Linux-f2fs-devel
  0 siblings, 1 reply; 164+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-04-27 11:02 UTC (permalink / raw)
  To: Jaegeuk Kim, Matthew Wilcox (Oracle); +Cc: linux-f2fs-devel

On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote:
> Support arbitrary size folios and remove a few hidden calls to
> compound_head().  Also remove an unnecessary test of the uptodaate flag;
> if mapping_read_folio_gfp() cannot bring the folio uptodate, it will
> return an error.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
>  fs/f2fs/super.c | 36 ++++++++++++++++--------------------
>  1 file changed, 16 insertions(+), 20 deletions(-)
> 
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index f087b2b71c89..fd93581bee89 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -2689,12 +2689,9 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
>  {
>  	struct inode *inode = sb_dqopt(sb)->files[type];
>  	struct address_space *mapping = inode->i_mapping;
> -	block_t blkidx = F2FS_BYTES_TO_BLK(off);
> -	int offset = off & (sb->s_blocksize - 1);
>  	int tocopy;
>  	size_t toread;
>  	loff_t i_size = i_size_read(inode);
> -	struct page *page;
>  
>  	if (off > i_size)
>  		return 0;
> @@ -2703,37 +2700,36 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
>  		len = i_size - off;
>  	toread = len;
>  	while (toread > 0) {
> -		tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread);
> +		struct folio *folio;
> +		size_t offset;
> +
>  repeat:
> -		page = read_cache_page_gfp(mapping, blkidx, GFP_NOFS);
> -		if (IS_ERR(page)) {
> -			if (PTR_ERR(page) == -ENOMEM) {
> +		folio = mapping_read_folio_gfp(mapping, off >> PAGE_SHIFT,
> +				GFP_NOFS);
> +		if (IS_ERR(folio)) {
> +			if (PTR_ERR(folio) == -ENOMEM) {
>  				memalloc_retry_wait(GFP_NOFS);
>  				goto repeat;
>  			}
>  			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
> -			return PTR_ERR(page);
> +			return PTR_ERR(folio);
>  		}
> +		offset = offset_in_folio(folio, off);
> +		tocopy = min(folio_size(folio) - offset, toread);
>  
> -		lock_page(page);
> +		folio_lock(folio);
>  
> -		if (unlikely(page->mapping != mapping)) {
> -			f2fs_put_page(page, 1);
> +		if (unlikely(folio->mapping != mapping)) {
> +			f2fs_folio_put(folio, true);
>  			goto repeat;
>  		}
> -		if (unlikely(!PageUptodate(page))) {

How about adding f2fs_bug_on(, !folio_test_uptodate(folio)) here to detect
any potential bug?

Thanks,

> -			f2fs_put_page(page, 1);
> -			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
> -			return -EIO;
> -		}
>  
> -		memcpy_from_page(data, page, offset, tocopy);
> -		f2fs_put_page(page, 1);
> +		memcpy_from_folio(data, folio, offset, tocopy);
> +		f2fs_folio_put(folio, true);
>  
> -		offset = 0;
>  		toread -= tocopy;
>  		data += tocopy;
> -		blkidx++;
> +		off += tocopy;
>  	}
>  	return len;
>  }



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 019/153] f2fs: Use a folio in f2fs_ra_meta_pages_cond()
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 019/153] f2fs: Use a folio in f2fs_ra_meta_pages_cond() Matthew Wilcox (Oracle)
@ 2025-04-27 11:17   ` Chao Yu via Linux-f2fs-devel
  2025-04-27 11:48     ` Chao Yu via Linux-f2fs-devel
  0 siblings, 1 reply; 164+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-04-27 11:17 UTC (permalink / raw)
  To: Matthew Wilcox (Oracle), Jaegeuk Kim; +Cc: linux-f2fs-devel

On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote:
> Remove a call to find_get_page().  Saves two hidden calls to
> compound_head().  Change f2fs_folio_put() to check for IS_ERR_OR_NULL
> to handle the case where we got an error pointer back from
> filemap_get_folio().
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
>  fs/f2fs/checkpoint.c | 8 ++++----
>  fs/f2fs/f2fs.h       | 2 +-
>  2 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
> index 1a5fbecd9356..30e68de82f73 100644
> --- a/fs/f2fs/checkpoint.c
> +++ b/fs/f2fs/checkpoint.c
> @@ -325,16 +325,16 @@ int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
>  void f2fs_ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index,
>  							unsigned int ra_blocks)
>  {
> -	struct page *page;
> +	struct folio *folio;
>  	bool readahead = false;
>  
>  	if (ra_blocks == RECOVERY_MIN_RA_BLOCKS)
>  		return;
>  
> -	page = find_get_page(META_MAPPING(sbi), index);
> -	if (!page || !PageUptodate(page))
> +	folio = filemap_get_folio(META_MAPPING(sbi), index);
> +	if (IS_ERR(folio) || !folio_test_uptodate(folio))
>  		readahead = true;
> -	f2fs_put_page(page, 0);
> +	f2fs_folio_put(folio, 0);

if (IS_ERR(folio))
	folio = NULL;

if (!folio || !folio_test_uptodate(folio))
	readahead = true;

f2fs_folio_put(folio, false);

Thanks,

>  
>  	if (readahead)
>  		f2fs_ra_meta_pages(sbi, index, ra_blocks, META_POR, true);
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 3d2be01f9363..f05185ed1c75 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -2871,7 +2871,7 @@ static inline struct page *f2fs_pagecache_get_page(
>  
>  static inline void f2fs_folio_put(struct folio *folio, bool unlock)
>  {
> -	if (!folio)
> +	if (IS_ERR_OR_NULL(folio))
>  		return;
>  
>  	if (unlock) {



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 031/153] f2fs: Use a folio in f2fs_get_valid_checkpoint()
  2025-03-31 20:10 ` [f2fs-dev] [PATCH 031/153] f2fs: Use a folio in f2fs_get_valid_checkpoint() Matthew Wilcox (Oracle)
@ 2025-04-27 11:26   ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 164+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-04-27 11:26 UTC (permalink / raw)
  To: Matthew Wilcox (Oracle), Jaegeuk Kim; +Cc: linux-f2fs-devel

On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote:
> Convert validate_checkpoint() to return a folio and use it throughout
> f2fs_get_valid_checkpoint().  Saves five hidden calls to compound_head().
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
>  fs/f2fs/checkpoint.c | 38 +++++++++++++++++++-------------------
>  1 file changed, 19 insertions(+), 19 deletions(-)
> 
> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
> index 8ae015b304db..c34add47ea8d 100644
> --- a/fs/f2fs/checkpoint.c
> +++ b/fs/f2fs/checkpoint.c
> @@ -880,7 +880,7 @@ static int get_checkpoint_version(struct f2fs_sb_info *sbi, block_t cp_addr,
>  	return 0;
>  }
>  
> -static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
> +static struct folio *validate_checkpoint(struct f2fs_sb_info *sbi,
>  				block_t cp_addr, unsigned long long *version)
>  {
>  	struct folio *cp_folio_1 = NULL, *cp_folio_2 = NULL;
> @@ -913,7 +913,7 @@ static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
>  	if (cur_version == pre_version) {
>  		*version = cur_version;
>  		f2fs_folio_put(cp_folio_2, true);
> -		return &cp_folio_1->page;
> +		return cp_folio_1;
>  	}
>  	f2fs_folio_put(cp_folio_2, true);
>  invalid_cp:
> @@ -925,7 +925,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
>  {
>  	struct f2fs_checkpoint *cp_block;
>  	struct f2fs_super_block *fsb = sbi->raw_super;
> -	struct page *cp1, *cp2, *cur_page;
> +	struct folio *cp1, *cp2, *cur_folio;
>  	unsigned long blk_size = sbi->blocksize;
>  	unsigned long long cp1_version = 0, cp2_version = 0;
>  	unsigned long long cp_start_blk_no;
> @@ -952,22 +952,22 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
>  
>  	if (cp1 && cp2) {
>  		if (ver_after(cp2_version, cp1_version))
> -			cur_page = cp2;
> +			cur_folio = cp2;
>  		else
> -			cur_page = cp1;
> +			cur_folio = cp1;
>  	} else if (cp1) {
> -		cur_page = cp1;
> +		cur_folio = cp1;
>  	} else if (cp2) {
> -		cur_page = cp2;
> +		cur_folio = cp2;
>  	} else {
>  		err = -EFSCORRUPTED;
>  		goto fail_no_cp;
>  	}
>  
> -	cp_block = (struct f2fs_checkpoint *)page_address(cur_page);
> +	cp_block = folio_address(cur_folio);
>  	memcpy(sbi->ckpt, cp_block, blk_size);
>  
> -	if (cur_page == cp1)
> +	if (cur_folio == cp1)
>  		sbi->cur_cp_pack = 1;
>  	else
>  		sbi->cur_cp_pack = 2;
> @@ -982,30 +982,30 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
>  		goto done;
>  
>  	cp_blk_no = le32_to_cpu(fsb->cp_blkaddr);
> -	if (cur_page == cp2)
> +	if (cur_folio == cp2)
>  		cp_blk_no += BIT(le32_to_cpu(fsb->log_blocks_per_seg));
>  
>  	for (i = 1; i < cp_blks; i++) {
>  		void *sit_bitmap_ptr;
>  		unsigned char *ckpt = (unsigned char *)sbi->ckpt;
>  
> -		cur_page = f2fs_get_meta_page(sbi, cp_blk_no + i);
> -		if (IS_ERR(cur_page)) {
> -			err = PTR_ERR(cur_page);
> +		cur_folio = f2fs_get_meta_folio(sbi, cp_blk_no + i);
> +		if (IS_ERR(cur_folio)) {
> +			err = PTR_ERR(cur_folio);
>  			goto free_fail_no_cp;
>  		}
> -		sit_bitmap_ptr = page_address(cur_page);
> +		sit_bitmap_ptr = folio_address(cur_folio);
>  		memcpy(ckpt + i * blk_size, sit_bitmap_ptr, blk_size);
> -		f2fs_put_page(cur_page, 1);
> +		f2fs_folio_put(cur_folio, 1);

f2fs_folio_put(cur_folio, true);

>  	}
>  done:
> -	f2fs_put_page(cp1, 1);
> -	f2fs_put_page(cp2, 1);
> +	f2fs_folio_put(cp1, 1);
> +	f2fs_folio_put(cp2, 1);

Ditto,

>  	return 0;
>  
>  free_fail_no_cp:
> -	f2fs_put_page(cp1, 1);
> -	f2fs_put_page(cp2, 1);
> +	f2fs_folio_put(cp1, 1);
> +	f2fs_folio_put(cp2, 1);

Ditto,

Thanks,

>  fail_no_cp:
>  	kvfree(sbi->ckpt);
>  	return err;



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 019/153] f2fs: Use a folio in f2fs_ra_meta_pages_cond()
  2025-04-27 11:17   ` Chao Yu via Linux-f2fs-devel
@ 2025-04-27 11:48     ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 164+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-04-27 11:48 UTC (permalink / raw)
  To: Matthew Wilcox (Oracle), Jaegeuk Kim; +Cc: linux-f2fs-devel

On 4/27/25 19:17, Chao Yu wrote:
> On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote:
>> Remove a call to find_get_page().  Saves two hidden calls to
>> compound_head().  Change f2fs_folio_put() to check for IS_ERR_OR_NULL
>> to handle the case where we got an error pointer back from
>> filemap_get_folio().
>>
>> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
>> ---
>>  fs/f2fs/checkpoint.c | 8 ++++----
>>  fs/f2fs/f2fs.h       | 2 +-
>>  2 files changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
>> index 1a5fbecd9356..30e68de82f73 100644
>> --- a/fs/f2fs/checkpoint.c
>> +++ b/fs/f2fs/checkpoint.c
>> @@ -325,16 +325,16 @@ int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
>>  void f2fs_ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index,
>>  							unsigned int ra_blocks)
>>  {
>> -	struct page *page;
>> +	struct folio *folio;
>>  	bool readahead = false;
>>  
>>  	if (ra_blocks == RECOVERY_MIN_RA_BLOCKS)
>>  		return;
>>  
>> -	page = find_get_page(META_MAPPING(sbi), index);
>> -	if (!page || !PageUptodate(page))
>> +	folio = filemap_get_folio(META_MAPPING(sbi), index);
>> +	if (IS_ERR(folio) || !folio_test_uptodate(folio))
>>  		readahead = true;
>> -	f2fs_put_page(page, 0);
>> +	f2fs_folio_put(folio, 0);
> 
> if (IS_ERR(folio))
> 	folio = NULL;

Oh, I missed that f2fs_folio_put() can handle error and NULL folio,
please ignore this.

> 
> if (!folio || !folio_test_uptodate(folio))
> 	readahead = true;
> 
> f2fs_folio_put(folio, false);

Only need to clean up the argument.

Thanks,

> 
> Thanks,
> 
>>  
>>  	if (readahead)
>>  		f2fs_ra_meta_pages(sbi, index, ra_blocks, META_POR, true);
>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
>> index 3d2be01f9363..f05185ed1c75 100644
>> --- a/fs/f2fs/f2fs.h
>> +++ b/fs/f2fs/f2fs.h
>> @@ -2871,7 +2871,7 @@ static inline struct page *f2fs_pagecache_get_page(
>>  
>>  static inline void f2fs_folio_put(struct folio *folio, bool unlock)
>>  {
>> -	if (!folio)
>> +	if (IS_ERR_OR_NULL(folio))
>>  		return;
>>  
>>  	if (unlock) {
> 



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (152 preceding siblings ...)
  2025-03-31 20:12 ` [f2fs-dev] [PATCH 153/153] f2fs: Convert clear_node_page_dirty() to clear_node_folio_dirty() Matthew Wilcox (Oracle)
@ 2025-04-28  7:17 ` Chao Yu via Linux-f2fs-devel
  2025-04-28 15:08   ` Jaegeuk Kim via Linux-f2fs-devel
  2025-04-28 22:40 ` patchwork-bot+f2fs--- via Linux-f2fs-devel
  154 siblings, 1 reply; 164+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-04-28  7:17 UTC (permalink / raw)
  To: Matthew Wilcox (Oracle), Jaegeuk Kim; +Cc: linux-f2fs-devel

On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote:
> Sorry for the length of this series.  Each patch in this series builds,
> but obviously I haven't done any testing.  It should be easy to bisect
> to any mistakes I've made.  This conversion isn't complete; I estimate
> another 100 or so patches will be needed.
> 
> Matthew Wilcox (Oracle) (153):
>   f2fs: Use a folio in f2fs_compress_free_page()
>   f2fs: Use a folio in f2fs_write_raw_pages()
>   f2fs: Introduce fio_inode()
>   f2fs: Use F2FS_P_SB() in f2fs_is_compressed_page()
>   f2fs: Use bio_for_each_folio_all() in __has_merged_page()
>   f2fs: Use a folio in add_ipu_page()
>   f2fs: Remove access to page->mapping in f2fs_is_cp_guaranteed()
>   f2fs: Use a folio in move_data_block()
>   f2fs: Use a folio in f2fs_quota_read()
>   f2fs: Add f2fs_grab_meta_folio()
>   f2fs: Use a folio in commit_checkpoint()
>   f2fs: Convert __f2fs_write_meta_page() to __f2fs_write_meta_folio()
>   f2fs: Use f2fs_folio_wait_writeback()
>   f2fs: Pass a folio to f2fs_submit_merged_ipu_write()
>   f2fs: Convert __get_meta_page() to __get_meta_folio()
>   f2fs: Convert f2fs_get_tmp_page() to f2fs_get_tmp_folio()
>   f2fs: Pass a folio to next_blkaddr_of_node()
>   f2fs: Use a folio in f2fs_ra_meta_pages()
>   f2fs: Use a folio in f2fs_ra_meta_pages_cond()
>   f2fs: Use a folio in write_orphan_inodes()
>   f2fs: Use a folio in get_next_nat_page()
>   f2fs: Convert get_next_sit_page() to get_next_sit_folio()
>   f2fs: Use a folio in f2fs_update_meta_page()
>   f2fs: Use a folio in write_current_sum_page()
>   f2fs: Use a folio in write_compacted_summaries()
>   f2fs: Remove f2fs_grab_meta_page()
>   f2fs: Add f2fs_get_meta_folio()
>   f2fs: Use a folio in build_sit_entries()
>   f2fs: Use a folio in f2fs_recover_orphan_inodes()
>   f2fs: Use a folio in validate_checkpoint()
>   f2fs: Use a folio in f2fs_get_valid_checkpoint()
>   f2fs: Use a folio in f2fs_get_node_info()
>   f2fs: Use a folio in __get_nat_bitmaps()
>   f2fs: Use a folio in read_compacted_summaries()
>   f2fs: Use a folio in read_normal_summaries()
>   f2fs: Remove f2fs_get_meta_page()
>   f2fs: Convert f2fs_get_meta_page_retry() to
>     f2fs_get_meta_folio_retry()
>   f2fs: Pass an address to scan_nat_page()
>   f2fs: Add f2fs_get_sum_folio()
>   f2fs: Use folios in do_garbage_collect()
>   f2fs: Use a folio in check_index_in_prev_nodes()
>   f2fs: Use a folio in change_curseg()
>   f2fs: Remove f2fs_get_sum_page()
>   f2fs: Use a folio in find_in_level()
>   f2fs: Use a folio in f2fs_delete_entry()
>   f2fs: Use a folio in f2fs_readdir()
>   f2fs: Remove f2fs_find_data_page()
>   f2fs: Use a folio in f2fs_get_new_data_page()
>   f2fs: Use a folio in f2fs_migrate_blocks()
>   f2fs: Add f2fs_get_new_data_folio()
>   highmem: Add memcpy_folio()
>   f2fs: Use a folio in __clone_blkaddrs()
>   f2fs: Use a folio in f2fs_defragment_range()
>   f2fs: Remove f2fs_get_lock_data_page()
>   f2fs: Use a folio in fill_zero()
>   f2fs: Use a folio in f2fs_add_regular_entry()
>   f2fs: Use a folio in make_empty_dir()
>   f2fs: Remove f2fs_get_new_data_page()
>   f2fs: Use a folio in f2fs_xattr_fiemap()
>   f2fs: Use a folio in ra_data_block()
>   f2fs: Use a folio in move_data_block()
>   f2fs: Use a folio in f2fs_convert_inline_inode()
>   f2fs: Use a folio in f2fs_move_inline_dirents()
>   f2fs: Add f2fs_new_node_folio()
>   f2fs: Use a folio in f2fs_ra_node_page()
>   f2fs: Convert read_node_page() to read_node_folio()
>   f2fs: Pass a folio to f2fs_inode_chksum_verify()
>   f2fs: Use a folio in f2fs_recover_inode_page()
>   f2fs: Remove f2fs_grab_cache_page()
>   f2fs: Add f2fs_get_xnode_folio()
>   f2fs: Use a folio in write_all_xattrs()
>   f2fs: Use a folio in f2fs_recover_xattr_data()
>   f2fs: Add f2fs_get_node_folio()
>   f2fs: Use folios in f2fs_get_dnode_of_data()
>   f2fs: Use a folio in truncate_node()
>   f2fs: Use a folio in truncate_nodes()
>   f2fs: Use folios in truncate_partial_nodes()
>   f2fs: Pass a folio to f2fs_ra_node_pages()
>   f2fs: Use a folio in gc_node_segment()
>   f2fs: Convert f2fs_move_node_page() to f2fs_move_node_folio()
>   f2fs: Convert __write_node_page() to __write_node_folio()
>   f2fs: Use a folio in is_alive()
>   f2fs: Use a folio in check_index_in_prev_nodes()
>   f2fs: Remove f2fs_get_node_page()
>   f2fs: Use a folio in prepare_write_begin
>   f2fs: Use a folio in __find_data_block()
>   f2fs: Use a folio in f2fs_init_inode_metadata()
>   f2fs: Pass a folio to make_empty_dir()
>   f2fs: Use a folio in f2fs_try_convert_inline_dir()
>   f2fs: Use a folio in f2fs_add_inline_entry()
>   f2fs: Pass a folio to f2fs_move_inline_dirents()
>   f2fs: Pass a folio to f2fs_move_rehashed_dirents()
>   f2fs: Use a folio in f2fs_do_truncate_blocks()
>   f2fs: Use a folio in f2fs_truncate_xattr_node()
>   f2fs: Pass folios to set_new_dnode()
>   f2fs: Convert f2fs_convert_inline_page() to
>     f2fs_convert_inline_folio()
>   f2fs: Use a folio in read_xattr_block()
>   f2fs: Remove f2fs_get_xnode_page()
>   f2fs: Use a folio in f2fs_write_inline_data()
>   f2fs: Use a folio in f2fs_read_inline_data()
>   f2fs: Use a folio in f2fs_recover_inline_data()
>   f2fs: Use a folio in f2fs_find_in_inline_dir()
>   f2fs: Use a folio in f2fs_empty_inline_dir()
>   f2fs: Use a folio in f2fs_read_inline_dir()
>   f2fs: Use a folio in f2fs_inline_data_fiemap()
>   f2fs: Use a folio in f2fs_update_inode_page()
>   f2fs: Use a folio in do_read_inode()
>   f2fs: Pass folios to f2fs_init_acl()
>   f2fs: Pass a folio to f2fs_setxattr()
>   f2fs: Pass a folio to __f2fs_setxattr()
>   f2fs: Pass a folio to write_all_xattrs()
>   f2fs: Use a folio in read_inline_xattr()
>   f2fs: Use a folio in f2fs_recover_inline_xattr()
>   f2fs: Remove f2fs_get_inode_page()
>   f2fs: Pass a folio to f2fs_getxattr()
>   f2fs: Pass a folio to read_inline_xattr()
>   f2fs: Pass a folio to do_recover_data()
>   f2fs: Pass a folio to f2fs_recover_inline_xattr()
>   f2fs: Pass a folio to inline_xattr_addr()
>   f2fs: Pass a folio to init_dent_inode()
>   f2fs: Pass a folio to f2fs_make_empty_inline_dir()
>   f2fs: Pass a folio to f2fs_has_enough_room()
>   f2fs: Convert dnode_of_data->inode_page to inode_folio
>   f2fs: Pass a folio to f2fs_do_read_inline_data()
>   f2fs: Pass a folio to f2fs_truncate_inline_inode()
>   f2fs: Pass a folio to __f2fs_find_entry()
>   f2fs: Pass a folio to f2fs_find_entry()
>   f2fs: Pass a folio to f2fs_parent_dir()
>   f2fs: Pass a folio to f2fs_delete_entry()
>   f2fs: Pass a folio to f2fs_delete_inline_entry()
>   f2fs: Pass a folio to f2fs_recover_inline_data()
>   f2fs: Pass a folio to __recover_inline_status()
>   f2fs: Pass a folio to inline_data_addr()
>   f2fs: Convert f2fs_put_page_dic() to f2fs_put_folio_dic()
>   f2fs: Pass a folio to f2fs_set_link()
>   f2fs: Use a folio in need_inode_page_update()
>   f2fs: Use a folio in f2fs_truncate_meta_inode_pages()
>   f2fs: Use a folio in f2fs_cache_compressed_page()
>   f2fs: Use a folio in prepare_compress_overwrite()
>   f2fs: Convert f2fs_load_compressed_page() to
>     f2fs_load_compressed_folio()
>   f2fs: Use a folio in f2fs_encrypt_one_page()
>   f2fs: Use a folio in redirty_blocks()
>   f2fs: Use a folio in f2fs_wait_on_block_writeback()
>   f2fs: Pass a folio to f2fs_init_read_extent_tree()
>   f2fs: Return a folio from f2fs_init_inode_metadata()
>   f2fs: Pass a folio to f2fs_update_inode()
>   f2fs: Pass a folio to set_nid()
>   f2fs: Convert dnode_of_data->node_page to node_folio
>   f2fs: Pass a folio to get_dnode_addr()
>   f2fs: Convert fsync_node_entry->page to folio
>   f2fs: Remove f2fs_new_node_page()
>   f2fs: Use a folio in flush_inline_data()
>   f2fs: Convert clear_node_page_dirty() to clear_node_folio_dirty()

Thanks for the work, the patchset looks good to me.

Reviewed-by: Chao Yu <chao@kernel.org>

Note that, it needs to clean up f2fs_put_page(, {0,1}) w/
f2fs_folio_put(, {false,true}), I guess Jaegeuk could help to update
directly in dev-test branch?

Thanks,

> 
>  fs/f2fs/acl.c           |  33 ++-
>  fs/f2fs/acl.h           |  10 +-
>  fs/f2fs/checkpoint.c    | 193 +++++++--------
>  fs/f2fs/compress.c      | 134 +++++-----
>  fs/f2fs/data.c          | 208 ++++++++--------
>  fs/f2fs/dir.c           | 240 +++++++++---------
>  fs/f2fs/extent_cache.c  |  10 +-
>  fs/f2fs/f2fs.h          | 184 +++++++-------
>  fs/f2fs/file.c          | 155 ++++++------
>  fs/f2fs/gc.c            | 140 ++++++-----
>  fs/f2fs/inline.c        | 306 +++++++++++------------
>  fs/f2fs/inode.c         |  94 +++----
>  fs/f2fs/namei.c         | 112 ++++-----
>  fs/f2fs/node.c          | 526 ++++++++++++++++++++--------------------
>  fs/f2fs/node.h          |  12 +-
>  fs/f2fs/recovery.c      | 178 +++++++-------
>  fs/f2fs/segment.c       | 147 ++++++-----
>  fs/f2fs/segment.h       |   6 +-
>  fs/f2fs/super.c         |  36 ++-
>  fs/f2fs/xattr.c         | 116 ++++-----
>  fs/f2fs/xattr.h         |  24 +-
>  include/linux/highmem.h |  27 +++
>  22 files changed, 1444 insertions(+), 1447 deletions(-)
> 



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16
  2025-04-28  7:17 ` [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Chao Yu via Linux-f2fs-devel
@ 2025-04-28 15:08   ` Jaegeuk Kim via Linux-f2fs-devel
  0 siblings, 0 replies; 164+ messages in thread
From: Jaegeuk Kim via Linux-f2fs-devel @ 2025-04-28 15:08 UTC (permalink / raw)
  To: Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

On 04/28, Chao Yu wrote:
> On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote:
> > Sorry for the length of this series.  Each patch in this series builds,
> > but obviously I haven't done any testing.  It should be easy to bisect
> > to any mistakes I've made.  This conversion isn't complete; I estimate
> > another 100 or so patches will be needed.
> > 
> > Matthew Wilcox (Oracle) (153):
> >   f2fs: Use a folio in f2fs_compress_free_page()
> >   f2fs: Use a folio in f2fs_write_raw_pages()
> >   f2fs: Introduce fio_inode()
> >   f2fs: Use F2FS_P_SB() in f2fs_is_compressed_page()
> >   f2fs: Use bio_for_each_folio_all() in __has_merged_page()
> >   f2fs: Use a folio in add_ipu_page()
> >   f2fs: Remove access to page->mapping in f2fs_is_cp_guaranteed()
> >   f2fs: Use a folio in move_data_block()
> >   f2fs: Use a folio in f2fs_quota_read()
> >   f2fs: Add f2fs_grab_meta_folio()
> >   f2fs: Use a folio in commit_checkpoint()
> >   f2fs: Convert __f2fs_write_meta_page() to __f2fs_write_meta_folio()
> >   f2fs: Use f2fs_folio_wait_writeback()
> >   f2fs: Pass a folio to f2fs_submit_merged_ipu_write()
> >   f2fs: Convert __get_meta_page() to __get_meta_folio()
> >   f2fs: Convert f2fs_get_tmp_page() to f2fs_get_tmp_folio()
> >   f2fs: Pass a folio to next_blkaddr_of_node()
> >   f2fs: Use a folio in f2fs_ra_meta_pages()
> >   f2fs: Use a folio in f2fs_ra_meta_pages_cond()
> >   f2fs: Use a folio in write_orphan_inodes()
> >   f2fs: Use a folio in get_next_nat_page()
> >   f2fs: Convert get_next_sit_page() to get_next_sit_folio()
> >   f2fs: Use a folio in f2fs_update_meta_page()
> >   f2fs: Use a folio in write_current_sum_page()
> >   f2fs: Use a folio in write_compacted_summaries()
> >   f2fs: Remove f2fs_grab_meta_page()
> >   f2fs: Add f2fs_get_meta_folio()
> >   f2fs: Use a folio in build_sit_entries()
> >   f2fs: Use a folio in f2fs_recover_orphan_inodes()
> >   f2fs: Use a folio in validate_checkpoint()
> >   f2fs: Use a folio in f2fs_get_valid_checkpoint()
> >   f2fs: Use a folio in f2fs_get_node_info()
> >   f2fs: Use a folio in __get_nat_bitmaps()
> >   f2fs: Use a folio in read_compacted_summaries()
> >   f2fs: Use a folio in read_normal_summaries()
> >   f2fs: Remove f2fs_get_meta_page()
> >   f2fs: Convert f2fs_get_meta_page_retry() to
> >     f2fs_get_meta_folio_retry()
> >   f2fs: Pass an address to scan_nat_page()
> >   f2fs: Add f2fs_get_sum_folio()
> >   f2fs: Use folios in do_garbage_collect()
> >   f2fs: Use a folio in check_index_in_prev_nodes()
> >   f2fs: Use a folio in change_curseg()
> >   f2fs: Remove f2fs_get_sum_page()
> >   f2fs: Use a folio in find_in_level()
> >   f2fs: Use a folio in f2fs_delete_entry()
> >   f2fs: Use a folio in f2fs_readdir()
> >   f2fs: Remove f2fs_find_data_page()
> >   f2fs: Use a folio in f2fs_get_new_data_page()
> >   f2fs: Use a folio in f2fs_migrate_blocks()
> >   f2fs: Add f2fs_get_new_data_folio()
> >   highmem: Add memcpy_folio()
> >   f2fs: Use a folio in __clone_blkaddrs()
> >   f2fs: Use a folio in f2fs_defragment_range()
> >   f2fs: Remove f2fs_get_lock_data_page()
> >   f2fs: Use a folio in fill_zero()
> >   f2fs: Use a folio in f2fs_add_regular_entry()
> >   f2fs: Use a folio in make_empty_dir()
> >   f2fs: Remove f2fs_get_new_data_page()
> >   f2fs: Use a folio in f2fs_xattr_fiemap()
> >   f2fs: Use a folio in ra_data_block()
> >   f2fs: Use a folio in move_data_block()
> >   f2fs: Use a folio in f2fs_convert_inline_inode()
> >   f2fs: Use a folio in f2fs_move_inline_dirents()
> >   f2fs: Add f2fs_new_node_folio()
> >   f2fs: Use a folio in f2fs_ra_node_page()
> >   f2fs: Convert read_node_page() to read_node_folio()
> >   f2fs: Pass a folio to f2fs_inode_chksum_verify()
> >   f2fs: Use a folio in f2fs_recover_inode_page()
> >   f2fs: Remove f2fs_grab_cache_page()
> >   f2fs: Add f2fs_get_xnode_folio()
> >   f2fs: Use a folio in write_all_xattrs()
> >   f2fs: Use a folio in f2fs_recover_xattr_data()
> >   f2fs: Add f2fs_get_node_folio()
> >   f2fs: Use folios in f2fs_get_dnode_of_data()
> >   f2fs: Use a folio in truncate_node()
> >   f2fs: Use a folio in truncate_nodes()
> >   f2fs: Use folios in truncate_partial_nodes()
> >   f2fs: Pass a folio to f2fs_ra_node_pages()
> >   f2fs: Use a folio in gc_node_segment()
> >   f2fs: Convert f2fs_move_node_page() to f2fs_move_node_folio()
> >   f2fs: Convert __write_node_page() to __write_node_folio()
> >   f2fs: Use a folio in is_alive()
> >   f2fs: Use a folio in check_index_in_prev_nodes()
> >   f2fs: Remove f2fs_get_node_page()
> >   f2fs: Use a folio in prepare_write_begin
> >   f2fs: Use a folio in __find_data_block()
> >   f2fs: Use a folio in f2fs_init_inode_metadata()
> >   f2fs: Pass a folio to make_empty_dir()
> >   f2fs: Use a folio in f2fs_try_convert_inline_dir()
> >   f2fs: Use a folio in f2fs_add_inline_entry()
> >   f2fs: Pass a folio to f2fs_move_inline_dirents()
> >   f2fs: Pass a folio to f2fs_move_rehashed_dirents()
> >   f2fs: Use a folio in f2fs_do_truncate_blocks()
> >   f2fs: Use a folio in f2fs_truncate_xattr_node()
> >   f2fs: Pass folios to set_new_dnode()
> >   f2fs: Convert f2fs_convert_inline_page() to
> >     f2fs_convert_inline_folio()
> >   f2fs: Use a folio in read_xattr_block()
> >   f2fs: Remove f2fs_get_xnode_page()
> >   f2fs: Use a folio in f2fs_write_inline_data()
> >   f2fs: Use a folio in f2fs_read_inline_data()
> >   f2fs: Use a folio in f2fs_recover_inline_data()
> >   f2fs: Use a folio in f2fs_find_in_inline_dir()
> >   f2fs: Use a folio in f2fs_empty_inline_dir()
> >   f2fs: Use a folio in f2fs_read_inline_dir()
> >   f2fs: Use a folio in f2fs_inline_data_fiemap()
> >   f2fs: Use a folio in f2fs_update_inode_page()
> >   f2fs: Use a folio in do_read_inode()
> >   f2fs: Pass folios to f2fs_init_acl()
> >   f2fs: Pass a folio to f2fs_setxattr()
> >   f2fs: Pass a folio to __f2fs_setxattr()
> >   f2fs: Pass a folio to write_all_xattrs()
> >   f2fs: Use a folio in read_inline_xattr()
> >   f2fs: Use a folio in f2fs_recover_inline_xattr()
> >   f2fs: Remove f2fs_get_inode_page()
> >   f2fs: Pass a folio to f2fs_getxattr()
> >   f2fs: Pass a folio to read_inline_xattr()
> >   f2fs: Pass a folio to do_recover_data()
> >   f2fs: Pass a folio to f2fs_recover_inline_xattr()
> >   f2fs: Pass a folio to inline_xattr_addr()
> >   f2fs: Pass a folio to init_dent_inode()
> >   f2fs: Pass a folio to f2fs_make_empty_inline_dir()
> >   f2fs: Pass a folio to f2fs_has_enough_room()
> >   f2fs: Convert dnode_of_data->inode_page to inode_folio
> >   f2fs: Pass a folio to f2fs_do_read_inline_data()
> >   f2fs: Pass a folio to f2fs_truncate_inline_inode()
> >   f2fs: Pass a folio to __f2fs_find_entry()
> >   f2fs: Pass a folio to f2fs_find_entry()
> >   f2fs: Pass a folio to f2fs_parent_dir()
> >   f2fs: Pass a folio to f2fs_delete_entry()
> >   f2fs: Pass a folio to f2fs_delete_inline_entry()
> >   f2fs: Pass a folio to f2fs_recover_inline_data()
> >   f2fs: Pass a folio to __recover_inline_status()
> >   f2fs: Pass a folio to inline_data_addr()
> >   f2fs: Convert f2fs_put_page_dic() to f2fs_put_folio_dic()
> >   f2fs: Pass a folio to f2fs_set_link()
> >   f2fs: Use a folio in need_inode_page_update()
> >   f2fs: Use a folio in f2fs_truncate_meta_inode_pages()
> >   f2fs: Use a folio in f2fs_cache_compressed_page()
> >   f2fs: Use a folio in prepare_compress_overwrite()
> >   f2fs: Convert f2fs_load_compressed_page() to
> >     f2fs_load_compressed_folio()
> >   f2fs: Use a folio in f2fs_encrypt_one_page()
> >   f2fs: Use a folio in redirty_blocks()
> >   f2fs: Use a folio in f2fs_wait_on_block_writeback()
> >   f2fs: Pass a folio to f2fs_init_read_extent_tree()
> >   f2fs: Return a folio from f2fs_init_inode_metadata()
> >   f2fs: Pass a folio to f2fs_update_inode()
> >   f2fs: Pass a folio to set_nid()
> >   f2fs: Convert dnode_of_data->node_page to node_folio
> >   f2fs: Pass a folio to get_dnode_addr()
> >   f2fs: Convert fsync_node_entry->page to folio
> >   f2fs: Remove f2fs_new_node_page()
> >   f2fs: Use a folio in flush_inline_data()
> >   f2fs: Convert clear_node_page_dirty() to clear_node_folio_dirty()
> 
> Thanks for the work, the patchset looks good to me.
> 
> Reviewed-by: Chao Yu <chao@kernel.org>
> 
> Note that, it needs to clean up f2fs_put_page(, {0,1}) w/
> f2fs_folio_put(, {false,true}), I guess Jaegeuk could help to update
> directly in dev-test branch?

Yup, let me resolve them directly.

Thanks,

> 
> Thanks,
> 
> > 
> >  fs/f2fs/acl.c           |  33 ++-
> >  fs/f2fs/acl.h           |  10 +-
> >  fs/f2fs/checkpoint.c    | 193 +++++++--------
> >  fs/f2fs/compress.c      | 134 +++++-----
> >  fs/f2fs/data.c          | 208 ++++++++--------
> >  fs/f2fs/dir.c           | 240 +++++++++---------
> >  fs/f2fs/extent_cache.c  |  10 +-
> >  fs/f2fs/f2fs.h          | 184 +++++++-------
> >  fs/f2fs/file.c          | 155 ++++++------
> >  fs/f2fs/gc.c            | 140 ++++++-----
> >  fs/f2fs/inline.c        | 306 +++++++++++------------
> >  fs/f2fs/inode.c         |  94 +++----
> >  fs/f2fs/namei.c         | 112 ++++-----
> >  fs/f2fs/node.c          | 526 ++++++++++++++++++++--------------------
> >  fs/f2fs/node.h          |  12 +-
> >  fs/f2fs/recovery.c      | 178 +++++++-------
> >  fs/f2fs/segment.c       | 147 ++++++-----
> >  fs/f2fs/segment.h       |   6 +-
> >  fs/f2fs/super.c         |  36 ++-
> >  fs/f2fs/xattr.c         | 116 ++++-----
> >  fs/f2fs/xattr.h         |  24 +-
> >  include/linux/highmem.h |  27 +++
> >  22 files changed, 1444 insertions(+), 1447 deletions(-)
> > 


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 009/153] f2fs: Use a folio in f2fs_quota_read()
  2025-04-27 11:02   ` Chao Yu via Linux-f2fs-devel
@ 2025-04-28 15:22     ` Jaegeuk Kim via Linux-f2fs-devel
  0 siblings, 0 replies; 164+ messages in thread
From: Jaegeuk Kim via Linux-f2fs-devel @ 2025-04-28 15:22 UTC (permalink / raw)
  To: Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

On 04/27, Chao Yu wrote:
> On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote:
> > Support arbitrary size folios and remove a few hidden calls to
> > compound_head().  Also remove an unnecessary test of the uptodaate flag;
> > if mapping_read_folio_gfp() cannot bring the folio uptodate, it will
> > return an error.
> > 
> > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> > ---
> >  fs/f2fs/super.c | 36 ++++++++++++++++--------------------
> >  1 file changed, 16 insertions(+), 20 deletions(-)
> > 
> > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> > index f087b2b71c89..fd93581bee89 100644
> > --- a/fs/f2fs/super.c
> > +++ b/fs/f2fs/super.c
> > @@ -2689,12 +2689,9 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
> >  {
> >  	struct inode *inode = sb_dqopt(sb)->files[type];
> >  	struct address_space *mapping = inode->i_mapping;
> > -	block_t blkidx = F2FS_BYTES_TO_BLK(off);
> > -	int offset = off & (sb->s_blocksize - 1);
> >  	int tocopy;
> >  	size_t toread;
> >  	loff_t i_size = i_size_read(inode);
> > -	struct page *page;
> >  
> >  	if (off > i_size)
> >  		return 0;
> > @@ -2703,37 +2700,36 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
> >  		len = i_size - off;
> >  	toread = len;
> >  	while (toread > 0) {
> > -		tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread);
> > +		struct folio *folio;
> > +		size_t offset;
> > +
> >  repeat:
> > -		page = read_cache_page_gfp(mapping, blkidx, GFP_NOFS);
> > -		if (IS_ERR(page)) {
> > -			if (PTR_ERR(page) == -ENOMEM) {
> > +		folio = mapping_read_folio_gfp(mapping, off >> PAGE_SHIFT,
> > +				GFP_NOFS);
> > +		if (IS_ERR(folio)) {
> > +			if (PTR_ERR(folio) == -ENOMEM) {
> >  				memalloc_retry_wait(GFP_NOFS);
> >  				goto repeat;
> >  			}
> >  			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
> > -			return PTR_ERR(page);
> > +			return PTR_ERR(folio);
> >  		}
> > +		offset = offset_in_folio(folio, off);
> > +		tocopy = min(folio_size(folio) - offset, toread);
> >  
> > -		lock_page(page);
> > +		folio_lock(folio);
> >  
> > -		if (unlikely(page->mapping != mapping)) {
> > -			f2fs_put_page(page, 1);
> > +		if (unlikely(folio->mapping != mapping)) {
> > +			f2fs_folio_put(folio, true);
> >  			goto repeat;
> >  		}
> > -		if (unlikely(!PageUptodate(page))) {
> 
> How about adding f2fs_bug_on(, !folio_test_uptodate(folio)) here to detect
> any potential bug?

It seems we can add f2fs_bug_on() separately.

> 
> Thanks,
> 
> > -			f2fs_put_page(page, 1);
> > -			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
> > -			return -EIO;
> > -		}
> >  
> > -		memcpy_from_page(data, page, offset, tocopy);
> > -		f2fs_put_page(page, 1);
> > +		memcpy_from_folio(data, folio, offset, tocopy);
> > +		f2fs_folio_put(folio, true);
> >  
> > -		offset = 0;
> >  		toread -= tocopy;
> >  		data += tocopy;
> > -		blkidx++;
> > +		off += tocopy;
> >  	}
> >  	return len;
> >  }


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

* Re: [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16
  2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
                   ` (153 preceding siblings ...)
  2025-04-28  7:17 ` [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Chao Yu via Linux-f2fs-devel
@ 2025-04-28 22:40 ` patchwork-bot+f2fs--- via Linux-f2fs-devel
  154 siblings, 0 replies; 164+ messages in thread
From: patchwork-bot+f2fs--- via Linux-f2fs-devel @ 2025-04-28 22:40 UTC (permalink / raw)
  To: Matthew Wilcox; +Cc: jaegeuk, linux-f2fs-devel

Hello:

This series was applied to jaegeuk/f2fs.git (dev)
by Jaegeuk Kim <jaegeuk@kernel.org>:

On Mon, 31 Mar 2025 21:10:20 +0100 you wrote:
> Sorry for the length of this series.  Each patch in this series builds,
> but obviously I haven't done any testing.  It should be easy to bisect
> to any mistakes I've made.  This conversion isn't complete; I estimate
> another 100 or so patches will be needed.
> 
> Matthew Wilcox (Oracle) (153):
>   f2fs: Use a folio in f2fs_compress_free_page()
>   f2fs: Use a folio in f2fs_write_raw_pages()
>   f2fs: Introduce fio_inode()
>   f2fs: Use F2FS_P_SB() in f2fs_is_compressed_page()
>   f2fs: Use bio_for_each_folio_all() in __has_merged_page()
>   f2fs: Use a folio in add_ipu_page()
>   f2fs: Remove access to page->mapping in f2fs_is_cp_guaranteed()
>   f2fs: Use a folio in move_data_block()
>   f2fs: Use a folio in f2fs_quota_read()
>   f2fs: Add f2fs_grab_meta_folio()
>   f2fs: Use a folio in commit_checkpoint()
>   f2fs: Convert __f2fs_write_meta_page() to __f2fs_write_meta_folio()
>   f2fs: Use f2fs_folio_wait_writeback()
>   f2fs: Pass a folio to f2fs_submit_merged_ipu_write()
>   f2fs: Convert __get_meta_page() to __get_meta_folio()
>   f2fs: Convert f2fs_get_tmp_page() to f2fs_get_tmp_folio()
>   f2fs: Pass a folio to next_blkaddr_of_node()
>   f2fs: Use a folio in f2fs_ra_meta_pages()
>   f2fs: Use a folio in f2fs_ra_meta_pages_cond()
>   f2fs: Use a folio in write_orphan_inodes()
>   f2fs: Use a folio in get_next_nat_page()
>   f2fs: Convert get_next_sit_page() to get_next_sit_folio()
>   f2fs: Use a folio in f2fs_update_meta_page()
>   f2fs: Use a folio in write_current_sum_page()
>   f2fs: Use a folio in write_compacted_summaries()
>   f2fs: Remove f2fs_grab_meta_page()
>   f2fs: Add f2fs_get_meta_folio()
>   f2fs: Use a folio in build_sit_entries()
>   f2fs: Use a folio in f2fs_recover_orphan_inodes()
>   f2fs: Use a folio in validate_checkpoint()
>   f2fs: Use a folio in f2fs_get_valid_checkpoint()
>   f2fs: Use a folio in f2fs_get_node_info()
>   f2fs: Use a folio in __get_nat_bitmaps()
>   f2fs: Use a folio in read_compacted_summaries()
>   f2fs: Use a folio in read_normal_summaries()
>   f2fs: Remove f2fs_get_meta_page()
>   f2fs: Convert f2fs_get_meta_page_retry() to
>     f2fs_get_meta_folio_retry()
>   f2fs: Pass an address to scan_nat_page()
>   f2fs: Add f2fs_get_sum_folio()
>   f2fs: Use folios in do_garbage_collect()
>   f2fs: Use a folio in check_index_in_prev_nodes()
>   f2fs: Use a folio in change_curseg()
>   f2fs: Remove f2fs_get_sum_page()
>   f2fs: Use a folio in find_in_level()
>   f2fs: Use a folio in f2fs_delete_entry()
>   f2fs: Use a folio in f2fs_readdir()
>   f2fs: Remove f2fs_find_data_page()
>   f2fs: Use a folio in f2fs_get_new_data_page()
>   f2fs: Use a folio in f2fs_migrate_blocks()
>   f2fs: Add f2fs_get_new_data_folio()
>   highmem: Add memcpy_folio()
>   f2fs: Use a folio in __clone_blkaddrs()
>   f2fs: Use a folio in f2fs_defragment_range()
>   f2fs: Remove f2fs_get_lock_data_page()
>   f2fs: Use a folio in fill_zero()
>   f2fs: Use a folio in f2fs_add_regular_entry()
>   f2fs: Use a folio in make_empty_dir()
>   f2fs: Remove f2fs_get_new_data_page()
>   f2fs: Use a folio in f2fs_xattr_fiemap()
>   f2fs: Use a folio in ra_data_block()
>   f2fs: Use a folio in move_data_block()
>   f2fs: Use a folio in f2fs_convert_inline_inode()
>   f2fs: Use a folio in f2fs_move_inline_dirents()
>   f2fs: Add f2fs_new_node_folio()
>   f2fs: Use a folio in f2fs_ra_node_page()
>   f2fs: Convert read_node_page() to read_node_folio()
>   f2fs: Pass a folio to f2fs_inode_chksum_verify()
>   f2fs: Use a folio in f2fs_recover_inode_page()
>   f2fs: Remove f2fs_grab_cache_page()
>   f2fs: Add f2fs_get_xnode_folio()
>   f2fs: Use a folio in write_all_xattrs()
>   f2fs: Use a folio in f2fs_recover_xattr_data()
>   f2fs: Add f2fs_get_node_folio()
>   f2fs: Use folios in f2fs_get_dnode_of_data()
>   f2fs: Use a folio in truncate_node()
>   f2fs: Use a folio in truncate_nodes()
>   f2fs: Use folios in truncate_partial_nodes()
>   f2fs: Pass a folio to f2fs_ra_node_pages()
>   f2fs: Use a folio in gc_node_segment()
>   f2fs: Convert f2fs_move_node_page() to f2fs_move_node_folio()
>   f2fs: Convert __write_node_page() to __write_node_folio()
>   f2fs: Use a folio in is_alive()
>   f2fs: Use a folio in check_index_in_prev_nodes()
>   f2fs: Remove f2fs_get_node_page()
>   f2fs: Use a folio in prepare_write_begin
>   f2fs: Use a folio in __find_data_block()
>   f2fs: Use a folio in f2fs_init_inode_metadata()
>   f2fs: Pass a folio to make_empty_dir()
>   f2fs: Use a folio in f2fs_try_convert_inline_dir()
>   f2fs: Use a folio in f2fs_add_inline_entry()
>   f2fs: Pass a folio to f2fs_move_inline_dirents()
>   f2fs: Pass a folio to f2fs_move_rehashed_dirents()
>   f2fs: Use a folio in f2fs_do_truncate_blocks()
>   f2fs: Use a folio in f2fs_truncate_xattr_node()
>   f2fs: Pass folios to set_new_dnode()
>   f2fs: Convert f2fs_convert_inline_page() to
>     f2fs_convert_inline_folio()
>   f2fs: Use a folio in read_xattr_block()
>   f2fs: Remove f2fs_get_xnode_page()
>   f2fs: Use a folio in f2fs_write_inline_data()
>   f2fs: Use a folio in f2fs_read_inline_data()
>   f2fs: Use a folio in f2fs_recover_inline_data()
>   f2fs: Use a folio in f2fs_find_in_inline_dir()
>   f2fs: Use a folio in f2fs_empty_inline_dir()
>   f2fs: Use a folio in f2fs_read_inline_dir()
>   f2fs: Use a folio in f2fs_inline_data_fiemap()
>   f2fs: Use a folio in f2fs_update_inode_page()
>   f2fs: Use a folio in do_read_inode()
>   f2fs: Pass folios to f2fs_init_acl()
>   f2fs: Pass a folio to f2fs_setxattr()
>   f2fs: Pass a folio to __f2fs_setxattr()
>   f2fs: Pass a folio to write_all_xattrs()
>   f2fs: Use a folio in read_inline_xattr()
>   f2fs: Use a folio in f2fs_recover_inline_xattr()
>   f2fs: Remove f2fs_get_inode_page()
>   f2fs: Pass a folio to f2fs_getxattr()
>   f2fs: Pass a folio to read_inline_xattr()
>   f2fs: Pass a folio to do_recover_data()
>   f2fs: Pass a folio to f2fs_recover_inline_xattr()
>   f2fs: Pass a folio to inline_xattr_addr()
>   f2fs: Pass a folio to init_dent_inode()
>   f2fs: Pass a folio to f2fs_make_empty_inline_dir()
>   f2fs: Pass a folio to f2fs_has_enough_room()
>   f2fs: Convert dnode_of_data->inode_page to inode_folio
>   f2fs: Pass a folio to f2fs_do_read_inline_data()
>   f2fs: Pass a folio to f2fs_truncate_inline_inode()
>   f2fs: Pass a folio to __f2fs_find_entry()
>   f2fs: Pass a folio to f2fs_find_entry()
>   f2fs: Pass a folio to f2fs_parent_dir()
>   f2fs: Pass a folio to f2fs_delete_entry()
>   f2fs: Pass a folio to f2fs_delete_inline_entry()
>   f2fs: Pass a folio to f2fs_recover_inline_data()
>   f2fs: Pass a folio to __recover_inline_status()
>   f2fs: Pass a folio to inline_data_addr()
>   f2fs: Convert f2fs_put_page_dic() to f2fs_put_folio_dic()
>   f2fs: Pass a folio to f2fs_set_link()
>   f2fs: Use a folio in need_inode_page_update()
>   f2fs: Use a folio in f2fs_truncate_meta_inode_pages()
>   f2fs: Use a folio in f2fs_cache_compressed_page()
>   f2fs: Use a folio in prepare_compress_overwrite()
>   f2fs: Convert f2fs_load_compressed_page() to
>     f2fs_load_compressed_folio()
>   f2fs: Use a folio in f2fs_encrypt_one_page()
>   f2fs: Use a folio in redirty_blocks()
>   f2fs: Use a folio in f2fs_wait_on_block_writeback()
>   f2fs: Pass a folio to f2fs_init_read_extent_tree()
>   f2fs: Return a folio from f2fs_init_inode_metadata()
>   f2fs: Pass a folio to f2fs_update_inode()
>   f2fs: Pass a folio to set_nid()
>   f2fs: Convert dnode_of_data->node_page to node_folio
>   f2fs: Pass a folio to get_dnode_addr()
>   f2fs: Convert fsync_node_entry->page to folio
>   f2fs: Remove f2fs_new_node_page()
>   f2fs: Use a folio in flush_inline_data()
>   f2fs: Convert clear_node_page_dirty() to clear_node_folio_dirty()
> 
> [...]

Here is the summary with links:
  - [f2fs-dev,001/153] f2fs: Use a folio in f2fs_compress_free_page()
    https://git.kernel.org/jaegeuk/f2fs/c/a8cb9b3d9b84
  - [f2fs-dev,002/153] f2fs: Use a folio in f2fs_write_raw_pages()
    https://git.kernel.org/jaegeuk/f2fs/c/8cc29b38cb26
  - [f2fs-dev,003/153] f2fs: Introduce fio_inode()
    (no matching commit)
  - [f2fs-dev,004/153] f2fs: Use F2FS_P_SB() in f2fs_is_compressed_page()
    https://git.kernel.org/jaegeuk/f2fs/c/98251710cae1
  - [f2fs-dev,005/153] f2fs: Use bio_for_each_folio_all() in __has_merged_page()
    https://git.kernel.org/jaegeuk/f2fs/c/acede6a57360
  - [f2fs-dev,006/153] f2fs: Use a folio in add_ipu_page()
    https://git.kernel.org/jaegeuk/f2fs/c/1db30d82365b
  - [f2fs-dev,007/153] f2fs: Remove access to page->mapping in f2fs_is_cp_guaranteed()
    https://git.kernel.org/jaegeuk/f2fs/c/6f8b9318c6eb
  - [f2fs-dev,008/153] f2fs: Use a folio in move_data_block()
    (no matching commit)
  - [f2fs-dev,009/153] f2fs: Use a folio in f2fs_quota_read()
    https://git.kernel.org/jaegeuk/f2fs/c/0d1e687e432b
  - [f2fs-dev,010/153] f2fs: Add f2fs_grab_meta_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/b15ca1857157
  - [f2fs-dev,011/153] f2fs: Use a folio in commit_checkpoint()
    https://git.kernel.org/jaegeuk/f2fs/c/668c7a564823
  - [f2fs-dev,012/153] f2fs: Convert __f2fs_write_meta_page() to __f2fs_write_meta_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/a8d397386371
  - [f2fs-dev,013/153] f2fs: Use f2fs_folio_wait_writeback()
    https://git.kernel.org/jaegeuk/f2fs/c/46fd261c677e
  - [f2fs-dev,014/153] f2fs: Pass a folio to f2fs_submit_merged_ipu_write()
    https://git.kernel.org/jaegeuk/f2fs/c/b629c6480ece
  - [f2fs-dev,015/153] f2fs: Convert __get_meta_page() to __get_meta_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/9030d55aedf8
  - [f2fs-dev,016/153] f2fs: Convert f2fs_get_tmp_page() to f2fs_get_tmp_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/937d6a4d2c21
  - [f2fs-dev,017/153] f2fs: Pass a folio to next_blkaddr_of_node()
    https://git.kernel.org/jaegeuk/f2fs/c/f24f7f8cd6e8
  - [f2fs-dev,018/153] f2fs: Use a folio in f2fs_ra_meta_pages()
    https://git.kernel.org/jaegeuk/f2fs/c/95e3117621e9
  - [f2fs-dev,019/153] f2fs: Use a folio in f2fs_ra_meta_pages_cond()
    (no matching commit)
  - [f2fs-dev,020/153] f2fs: Use a folio in write_orphan_inodes()
    https://git.kernel.org/jaegeuk/f2fs/c/643d16687d7a
  - [f2fs-dev,021/153] f2fs: Use a folio in get_next_nat_page()
    https://git.kernel.org/jaegeuk/f2fs/c/5df510c8df69
  - [f2fs-dev,022/153] f2fs: Convert get_next_sit_page() to get_next_sit_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/9c6b0f120e11
  - [f2fs-dev,023/153] f2fs: Use a folio in f2fs_update_meta_page()
    https://git.kernel.org/jaegeuk/f2fs/c/5c1b57bb8393
  - [f2fs-dev,024/153] f2fs: Use a folio in write_current_sum_page()
    https://git.kernel.org/jaegeuk/f2fs/c/43b3ed1c6ce0
  - [f2fs-dev,025/153] f2fs: Use a folio in write_compacted_summaries()
    https://git.kernel.org/jaegeuk/f2fs/c/1ec366290109
  - [f2fs-dev,026/153] f2fs: Remove f2fs_grab_meta_page()
    https://git.kernel.org/jaegeuk/f2fs/c/2424ee9b752a
  - [f2fs-dev,027/153] f2fs: Add f2fs_get_meta_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/d6f3066301bc
  - [f2fs-dev,028/153] f2fs: Use a folio in build_sit_entries()
    https://git.kernel.org/jaegeuk/f2fs/c/6225716f38a8
  - [f2fs-dev,029/153] f2fs: Use a folio in f2fs_recover_orphan_inodes()
    https://git.kernel.org/jaegeuk/f2fs/c/375452b50751
  - [f2fs-dev,030/153] f2fs: Use a folio in validate_checkpoint()
    https://git.kernel.org/jaegeuk/f2fs/c/a2c746eac30e
  - [f2fs-dev,031/153] f2fs: Use a folio in f2fs_get_valid_checkpoint()
    (no matching commit)
  - [f2fs-dev,032/153] f2fs: Use a folio in f2fs_get_node_info()
    https://git.kernel.org/jaegeuk/f2fs/c/aa0c14ef54e0
  - [f2fs-dev,033/153] f2fs: Use a folio in __get_nat_bitmaps()
    https://git.kernel.org/jaegeuk/f2fs/c/8a6fb4cc554e
  - [f2fs-dev,034/153] f2fs: Use a folio in read_compacted_summaries()
    https://git.kernel.org/jaegeuk/f2fs/c/3a34e0cdd9c6
  - [f2fs-dev,035/153] f2fs: Use a folio in read_normal_summaries()
    https://git.kernel.org/jaegeuk/f2fs/c/9fdb4325e0a4
  - [f2fs-dev,036/153] f2fs: Remove f2fs_get_meta_page()
    https://git.kernel.org/jaegeuk/f2fs/c/657b31b2d71c
  - [f2fs-dev,037/153] f2fs: Convert f2fs_get_meta_page_retry() to f2fs_get_meta_folio_retry()
    https://git.kernel.org/jaegeuk/f2fs/c/350b8441c0e9
  - [f2fs-dev,038/153] f2fs: Pass an address to scan_nat_page()
    https://git.kernel.org/jaegeuk/f2fs/c/6b5c4a035913
  - [f2fs-dev,039/153] f2fs: Add f2fs_get_sum_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/4a2c49d2cbb9
  - [f2fs-dev,040/153] f2fs: Use folios in do_garbage_collect()
    https://git.kernel.org/jaegeuk/f2fs/c/5d895f7beae9
  - [f2fs-dev,041/153] f2fs: Use a folio in check_index_in_prev_nodes()
    https://git.kernel.org/jaegeuk/f2fs/c/b536cd889ea8
  - [f2fs-dev,042/153] f2fs: Use a folio in change_curseg()
    https://git.kernel.org/jaegeuk/f2fs/c/0e1073f850fc
  - [f2fs-dev,043/153] f2fs: Remove f2fs_get_sum_page()
    https://git.kernel.org/jaegeuk/f2fs/c/366848cb7126
  - [f2fs-dev,044/153] f2fs: Use a folio in find_in_level()
    https://git.kernel.org/jaegeuk/f2fs/c/e4ca8ff450c3
  - [f2fs-dev,045/153] f2fs: Use a folio in f2fs_delete_entry()
    https://git.kernel.org/jaegeuk/f2fs/c/7d5a82490f94
  - [f2fs-dev,046/153] f2fs: Use a folio in f2fs_readdir()
    https://git.kernel.org/jaegeuk/f2fs/c/d040455c7911
  - [f2fs-dev,047/153] f2fs: Remove f2fs_find_data_page()
    https://git.kernel.org/jaegeuk/f2fs/c/c713bbb17c4d
  - [f2fs-dev,048/153] f2fs: Use a folio in f2fs_get_new_data_page()
    https://git.kernel.org/jaegeuk/f2fs/c/65f99d35fe87
  - [f2fs-dev,049/153] f2fs: Use a folio in f2fs_migrate_blocks()
    https://git.kernel.org/jaegeuk/f2fs/c/38f273c5049d
  - [f2fs-dev,050/153] f2fs: Add f2fs_get_new_data_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/48b68943053a
  - [f2fs-dev,051/153] highmem: Add memcpy_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/1313057c369b
  - [f2fs-dev,052/153] f2fs: Use a folio in __clone_blkaddrs()
    https://git.kernel.org/jaegeuk/f2fs/c/3dfcb2b43e3a
  - [f2fs-dev,053/153] f2fs: Use a folio in f2fs_defragment_range()
    https://git.kernel.org/jaegeuk/f2fs/c/c0a4bb8ae6da
  - [f2fs-dev,054/153] f2fs: Remove f2fs_get_lock_data_page()
    https://git.kernel.org/jaegeuk/f2fs/c/6965a65caf83
  - [f2fs-dev,055/153] f2fs: Use a folio in fill_zero()
    https://git.kernel.org/jaegeuk/f2fs/c/c35cc972c3cd
  - [f2fs-dev,056/153] f2fs: Use a folio in f2fs_add_regular_entry()
    https://git.kernel.org/jaegeuk/f2fs/c/c45ce8f76ab3
  - [f2fs-dev,057/153] f2fs: Use a folio in make_empty_dir()
    https://git.kernel.org/jaegeuk/f2fs/c/a85127c58a3b
  - [f2fs-dev,058/153] f2fs: Remove f2fs_get_new_data_page()
    https://git.kernel.org/jaegeuk/f2fs/c/d2eb6d86e0fe
  - [f2fs-dev,059/153] f2fs: Use a folio in f2fs_xattr_fiemap()
    https://git.kernel.org/jaegeuk/f2fs/c/514163f699af
  - [f2fs-dev,060/153] f2fs: Use a folio in ra_data_block()
    https://git.kernel.org/jaegeuk/f2fs/c/0d53be232343
  - [f2fs-dev,061/153] f2fs: Use a folio in move_data_block()
    https://git.kernel.org/jaegeuk/f2fs/c/2a96ddcb4a59
  - [f2fs-dev,062/153] f2fs: Use a folio in f2fs_convert_inline_inode()
    https://git.kernel.org/jaegeuk/f2fs/c/f8fa37fbec96
  - [f2fs-dev,063/153] f2fs: Use a folio in f2fs_move_inline_dirents()
    https://git.kernel.org/jaegeuk/f2fs/c/e57e6ee5cd80
  - [f2fs-dev,064/153] f2fs: Add f2fs_new_node_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/cfa809146f82
  - [f2fs-dev,065/153] f2fs: Use a folio in f2fs_ra_node_page()
    https://git.kernel.org/jaegeuk/f2fs/c/9d79652e4473
  - [f2fs-dev,066/153] f2fs: Convert read_node_page() to read_node_folio()
    (no matching commit)
  - [f2fs-dev,067/153] f2fs: Pass a folio to f2fs_inode_chksum_verify()
    https://git.kernel.org/jaegeuk/f2fs/c/7c213e98c723
  - [f2fs-dev,068/153] f2fs: Use a folio in f2fs_recover_inode_page()
    https://git.kernel.org/jaegeuk/f2fs/c/8b78cea81238
  - [f2fs-dev,069/153] f2fs: Remove f2fs_grab_cache_page()
    https://git.kernel.org/jaegeuk/f2fs/c/5c93848a92ac
  - [f2fs-dev,070/153] f2fs: Add f2fs_get_xnode_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/153e4a7f8906
  - [f2fs-dev,071/153] f2fs: Use a folio in write_all_xattrs()
    https://git.kernel.org/jaegeuk/f2fs/c/b3094519c1f1
  - [f2fs-dev,072/153] f2fs: Use a folio in f2fs_recover_xattr_data()
    https://git.kernel.org/jaegeuk/f2fs/c/401da8dd7887
  - [f2fs-dev,073/153] f2fs: Add f2fs_get_node_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/aa220cede54e
  - [f2fs-dev,074/153] f2fs: Use folios in f2fs_get_dnode_of_data()
    (no matching commit)
  - [f2fs-dev,075/153] f2fs: Use a folio in truncate_node()
    https://git.kernel.org/jaegeuk/f2fs/c/df4101400621
  - [f2fs-dev,076/153] f2fs: Use a folio in truncate_nodes()
    https://git.kernel.org/jaegeuk/f2fs/c/878a05b09c0c
  - [f2fs-dev,077/153] f2fs: Use folios in truncate_partial_nodes()
    https://git.kernel.org/jaegeuk/f2fs/c/d68833a0b74e
  - [f2fs-dev,078/153] f2fs: Pass a folio to f2fs_ra_node_pages()
    (no matching commit)
  - [f2fs-dev,079/153] f2fs: Use a folio in gc_node_segment()
    https://git.kernel.org/jaegeuk/f2fs/c/c528defa64ae
  - [f2fs-dev,080/153] f2fs: Convert f2fs_move_node_page() to f2fs_move_node_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/c795d9dbe035
  - [f2fs-dev,081/153] f2fs: Convert __write_node_page() to __write_node_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/722066201f42
  - [f2fs-dev,082/153] f2fs: Use a folio in is_alive()
    https://git.kernel.org/jaegeuk/f2fs/c/1a116e876ab6
  - [f2fs-dev,083/153] f2fs: Use a folio in check_index_in_prev_nodes()
    https://git.kernel.org/jaegeuk/f2fs/c/da8768c87527
  - [f2fs-dev,084/153] f2fs: Remove f2fs_get_node_page()
    https://git.kernel.org/jaegeuk/f2fs/c/424fd5d831e1
  - [f2fs-dev,085/153] f2fs: Use a folio in prepare_write_begin
    https://git.kernel.org/jaegeuk/f2fs/c/c68b0bcb29d6
  - [f2fs-dev,086/153] f2fs: Use a folio in __find_data_block()
    https://git.kernel.org/jaegeuk/f2fs/c/0e1717dd92a9
  - [f2fs-dev,087/153] f2fs: Use a folio in f2fs_init_inode_metadata()
    https://git.kernel.org/jaegeuk/f2fs/c/7c99299c9ac8
  - [f2fs-dev,088/153] f2fs: Pass a folio to make_empty_dir()
    https://git.kernel.org/jaegeuk/f2fs/c/bdbf142204c5
  - [f2fs-dev,089/153] f2fs: Use a folio in f2fs_try_convert_inline_dir()
    https://git.kernel.org/jaegeuk/f2fs/c/869521352de8
  - [f2fs-dev,090/153] f2fs: Use a folio in f2fs_add_inline_entry()
    https://git.kernel.org/jaegeuk/f2fs/c/9283b58a148f
  - [f2fs-dev,091/153] f2fs: Pass a folio to f2fs_move_inline_dirents()
    https://git.kernel.org/jaegeuk/f2fs/c/717735db2604
  - [f2fs-dev,092/153] f2fs: Pass a folio to f2fs_move_rehashed_dirents()
    https://git.kernel.org/jaegeuk/f2fs/c/8f8c0c45449e
  - [f2fs-dev,093/153] f2fs: Use a folio in f2fs_do_truncate_blocks()
    https://git.kernel.org/jaegeuk/f2fs/c/d9554488b06d
  - [f2fs-dev,094/153] f2fs: Use a folio in f2fs_truncate_xattr_node()
    https://git.kernel.org/jaegeuk/f2fs/c/a8a4ad25b579
  - [f2fs-dev,095/153] f2fs: Pass folios to set_new_dnode()
    https://git.kernel.org/jaegeuk/f2fs/c/214235c224df
  - [f2fs-dev,096/153] f2fs: Convert f2fs_convert_inline_page() to f2fs_convert_inline_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/6023048cf62d
  - [f2fs-dev,097/153] f2fs: Use a folio in read_xattr_block()
    https://git.kernel.org/jaegeuk/f2fs/c/c972c546fa2b
  - [f2fs-dev,098/153] f2fs: Remove f2fs_get_xnode_page()
    https://git.kernel.org/jaegeuk/f2fs/c/0999f98e6c21
  - [f2fs-dev,099/153] f2fs: Use a folio in f2fs_write_inline_data()
    https://git.kernel.org/jaegeuk/f2fs/c/466f0e661d7a
  - [f2fs-dev,100/153] f2fs: Use a folio in f2fs_read_inline_data()
    https://git.kernel.org/jaegeuk/f2fs/c/5f5efd70304a
  - [f2fs-dev,101/153] f2fs: Use a folio in f2fs_recover_inline_data()
    https://git.kernel.org/jaegeuk/f2fs/c/f7725a793e1e
  - [f2fs-dev,102/153] f2fs: Use a folio in f2fs_find_in_inline_dir()
    https://git.kernel.org/jaegeuk/f2fs/c/317c31680e94
  - [f2fs-dev,103/153] f2fs: Use a folio in f2fs_empty_inline_dir()
    https://git.kernel.org/jaegeuk/f2fs/c/08e83ca0954c
  - [f2fs-dev,104/153] f2fs: Use a folio in f2fs_read_inline_dir()
    https://git.kernel.org/jaegeuk/f2fs/c/f5ef723c170f
  - [f2fs-dev,105/153] f2fs: Use a folio in f2fs_inline_data_fiemap()
    https://git.kernel.org/jaegeuk/f2fs/c/a0fd315e31f3
  - [f2fs-dev,106/153] f2fs: Use a folio in f2fs_update_inode_page()
    https://git.kernel.org/jaegeuk/f2fs/c/870ef8d3c480
  - [f2fs-dev,107/153] f2fs: Use a folio in do_read_inode()
    https://git.kernel.org/jaegeuk/f2fs/c/802aa48dba07
  - [f2fs-dev,108/153] f2fs: Pass folios to f2fs_init_acl()
    https://git.kernel.org/jaegeuk/f2fs/c/9de27930c56b
  - [f2fs-dev,109/153] f2fs: Pass a folio to f2fs_setxattr()
    https://git.kernel.org/jaegeuk/f2fs/c/953ab314c75e
  - [f2fs-dev,110/153] f2fs: Pass a folio to __f2fs_setxattr()
    https://git.kernel.org/jaegeuk/f2fs/c/b3955efbc002
  - [f2fs-dev,111/153] f2fs: Pass a folio to write_all_xattrs()
    https://git.kernel.org/jaegeuk/f2fs/c/170c445a5e1f
  - [f2fs-dev,112/153] f2fs: Use a folio in read_inline_xattr()
    https://git.kernel.org/jaegeuk/f2fs/c/1aa467014b25
  - [f2fs-dev,113/153] f2fs: Use a folio in f2fs_recover_inline_xattr()
    https://git.kernel.org/jaegeuk/f2fs/c/2557c3ea4c4e
  - [f2fs-dev,114/153] f2fs: Remove f2fs_get_inode_page()
    https://git.kernel.org/jaegeuk/f2fs/c/cdbe260d559a
  - [f2fs-dev,115/153] f2fs: Pass a folio to f2fs_getxattr()
    https://git.kernel.org/jaegeuk/f2fs/c/39d20727d8b9
  - [f2fs-dev,116/153] f2fs: Pass a folio to read_inline_xattr()
    https://git.kernel.org/jaegeuk/f2fs/c/c8b198748611
  - [f2fs-dev,117/153] f2fs: Pass a folio to do_recover_data()
    https://git.kernel.org/jaegeuk/f2fs/c/847bfef73a70
  - [f2fs-dev,118/153] f2fs: Pass a folio to f2fs_recover_inline_xattr()
    https://git.kernel.org/jaegeuk/f2fs/c/39b53c0b9946
  - [f2fs-dev,119/153] f2fs: Pass a folio to inline_xattr_addr()
    https://git.kernel.org/jaegeuk/f2fs/c/e0691a051f11
  - [f2fs-dev,120/153] f2fs: Pass a folio to init_dent_inode()
    https://git.kernel.org/jaegeuk/f2fs/c/0439ae45b5e5
  - [f2fs-dev,121/153] f2fs: Pass a folio to f2fs_make_empty_inline_dir()
    https://git.kernel.org/jaegeuk/f2fs/c/c5622a4630b4
  - [f2fs-dev,122/153] f2fs: Pass a folio to f2fs_has_enough_room()
    https://git.kernel.org/jaegeuk/f2fs/c/c01547da6b15
  - [f2fs-dev,123/153] f2fs: Convert dnode_of_data->inode_page to inode_folio
    https://git.kernel.org/jaegeuk/f2fs/c/f1d54e07a97f
  - [f2fs-dev,124/153] f2fs: Pass a folio to f2fs_do_read_inline_data()
    https://git.kernel.org/jaegeuk/f2fs/c/848839ce0505
  - [f2fs-dev,125/153] f2fs: Pass a folio to f2fs_truncate_inline_inode()
    https://git.kernel.org/jaegeuk/f2fs/c/b3720382eee7
  - [f2fs-dev,126/153] f2fs: Pass a folio to __f2fs_find_entry()
    https://git.kernel.org/jaegeuk/f2fs/c/c190a13d71e7
  - [f2fs-dev,127/153] f2fs: Pass a folio to f2fs_find_entry()
    (no matching commit)
  - [f2fs-dev,128/153] f2fs: Pass a folio to f2fs_parent_dir()
    https://git.kernel.org/jaegeuk/f2fs/c/932a95537aca
  - [f2fs-dev,129/153] f2fs: Pass a folio to f2fs_delete_entry()
    https://git.kernel.org/jaegeuk/f2fs/c/03a757121314
  - [f2fs-dev,130/153] f2fs: Pass a folio to f2fs_delete_inline_entry()
    https://git.kernel.org/jaegeuk/f2fs/c/b5b66bc4dfd1
  - [f2fs-dev,131/153] f2fs: Pass a folio to f2fs_recover_inline_data()
    https://git.kernel.org/jaegeuk/f2fs/c/413977c956db
  - [f2fs-dev,132/153] f2fs: Pass a folio to __recover_inline_status()
    https://git.kernel.org/jaegeuk/f2fs/c/1834406c9849
  - [f2fs-dev,133/153] f2fs: Pass a folio to inline_data_addr()
    https://git.kernel.org/jaegeuk/f2fs/c/d79bc8ab4417
  - [f2fs-dev,134/153] f2fs: Convert f2fs_put_page_dic() to f2fs_put_folio_dic()
    https://git.kernel.org/jaegeuk/f2fs/c/1d6bf61778a5
  - [f2fs-dev,135/153] f2fs: Pass a folio to f2fs_set_link()
    https://git.kernel.org/jaegeuk/f2fs/c/5b61618aa0ad
  - [f2fs-dev,136/153] f2fs: Use a folio in need_inode_page_update()
    https://git.kernel.org/jaegeuk/f2fs/c/ba13af45e517
  - [f2fs-dev,137/153] f2fs: Use a folio in f2fs_truncate_meta_inode_pages()
    https://git.kernel.org/jaegeuk/f2fs/c/47d73eae3acc
  - [f2fs-dev,138/153] f2fs: Use a folio in f2fs_cache_compressed_page()
    https://git.kernel.org/jaegeuk/f2fs/c/3d56058c55d4
  - [f2fs-dev,139/153] f2fs: Use a folio in prepare_compress_overwrite()
    https://git.kernel.org/jaegeuk/f2fs/c/75de20f41fa8
  - [f2fs-dev,140/153] f2fs: Convert f2fs_load_compressed_page() to f2fs_load_compressed_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/842974808ac2
  - [f2fs-dev,141/153] f2fs: Use a folio in f2fs_encrypt_one_page()
    https://git.kernel.org/jaegeuk/f2fs/c/b02a903218bd
  - [f2fs-dev,142/153] f2fs: Use a folio in redirty_blocks()
    https://git.kernel.org/jaegeuk/f2fs/c/5951fee46bef
  - [f2fs-dev,143/153] f2fs: Use a folio in f2fs_wait_on_block_writeback()
    https://git.kernel.org/jaegeuk/f2fs/c/97e1b86169b3
  - [f2fs-dev,144/153] f2fs: Pass a folio to f2fs_init_read_extent_tree()
    https://git.kernel.org/jaegeuk/f2fs/c/398c7df7bc6b
  - [f2fs-dev,145/153] f2fs: Return a folio from f2fs_init_inode_metadata()
    https://git.kernel.org/jaegeuk/f2fs/c/a6d26d5c7581
  - [f2fs-dev,146/153] f2fs: Pass a folio to f2fs_update_inode()
    https://git.kernel.org/jaegeuk/f2fs/c/f92379289f0c
  - [f2fs-dev,147/153] f2fs: Pass a folio to set_nid()
    https://git.kernel.org/jaegeuk/f2fs/c/66bca01bc52a
  - [f2fs-dev,148/153] f2fs: Convert dnode_of_data->node_page to node_folio
    https://git.kernel.org/jaegeuk/f2fs/c/6f7ec6618021
  - [f2fs-dev,149/153] f2fs: Pass a folio to get_dnode_addr()
    https://git.kernel.org/jaegeuk/f2fs/c/7d28f13c583c
  - [f2fs-dev,150/153] f2fs: Convert fsync_node_entry->page to folio
    https://git.kernel.org/jaegeuk/f2fs/c/963da02bc12d
  - [f2fs-dev,151/153] f2fs: Remove f2fs_new_node_page()
    https://git.kernel.org/jaegeuk/f2fs/c/6b1ad395455b
  - [f2fs-dev,152/153] f2fs: Use a folio in flush_inline_data()
    https://git.kernel.org/jaegeuk/f2fs/c/a4d077027121
  - [f2fs-dev,153/153] f2fs: Convert clear_node_page_dirty() to clear_node_folio_dirty()
    https://git.kernel.org/jaegeuk/f2fs/c/f16ebe0de732

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html




_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 164+ messages in thread

end of thread, other threads:[~2025-04-28 22:40 UTC | newest]

Thread overview: 164+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-31 20:10 [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 001/153] f2fs: Use a folio in f2fs_compress_free_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 002/153] f2fs: Use a folio in f2fs_write_raw_pages() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 003/153] f2fs: Introduce fio_inode() Matthew Wilcox (Oracle)
2025-04-15 19:22   ` Jaegeuk Kim via Linux-f2fs-devel
2025-03-31 20:10 ` [f2fs-dev] [PATCH 004/153] f2fs: Use F2FS_P_SB() in f2fs_is_compressed_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 005/153] f2fs: Use bio_for_each_folio_all() in __has_merged_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 006/153] f2fs: Use a folio in add_ipu_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 007/153] f2fs: Remove access to page->mapping in f2fs_is_cp_guaranteed() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 008/153] f2fs: Use a folio in move_data_block() Matthew Wilcox (Oracle)
2025-04-27  9:31   ` Chao Yu via Linux-f2fs-devel
2025-03-31 20:10 ` [f2fs-dev] [PATCH 009/153] f2fs: Use a folio in f2fs_quota_read() Matthew Wilcox (Oracle)
2025-04-27 11:02   ` Chao Yu via Linux-f2fs-devel
2025-04-28 15:22     ` Jaegeuk Kim via Linux-f2fs-devel
2025-03-31 20:10 ` [f2fs-dev] [PATCH 010/153] f2fs: Add f2fs_grab_meta_folio() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 011/153] f2fs: Use a folio in commit_checkpoint() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 012/153] f2fs: Convert __f2fs_write_meta_page() to __f2fs_write_meta_folio() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 013/153] f2fs: Use f2fs_folio_wait_writeback() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 014/153] f2fs: Pass a folio to f2fs_submit_merged_ipu_write() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 015/153] f2fs: Convert __get_meta_page() to __get_meta_folio() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 016/153] f2fs: Convert f2fs_get_tmp_page() to f2fs_get_tmp_folio() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 017/153] f2fs: Pass a folio to next_blkaddr_of_node() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 018/153] f2fs: Use a folio in f2fs_ra_meta_pages() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 019/153] f2fs: Use a folio in f2fs_ra_meta_pages_cond() Matthew Wilcox (Oracle)
2025-04-27 11:17   ` Chao Yu via Linux-f2fs-devel
2025-04-27 11:48     ` Chao Yu via Linux-f2fs-devel
2025-03-31 20:10 ` [f2fs-dev] [PATCH 020/153] f2fs: Use a folio in write_orphan_inodes() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 021/153] f2fs: Use a folio in get_next_nat_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 022/153] f2fs: Convert get_next_sit_page() to get_next_sit_folio() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 023/153] f2fs: Use a folio in f2fs_update_meta_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 024/153] f2fs: Use a folio in write_current_sum_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 025/153] f2fs: Use a folio in write_compacted_summaries() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 026/153] f2fs: Remove f2fs_grab_meta_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 027/153] f2fs: Add f2fs_get_meta_folio() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 028/153] f2fs: Use a folio in build_sit_entries() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 029/153] f2fs: Use a folio in f2fs_recover_orphan_inodes() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 030/153] f2fs: Use a folio in validate_checkpoint() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 031/153] f2fs: Use a folio in f2fs_get_valid_checkpoint() Matthew Wilcox (Oracle)
2025-04-27 11:26   ` Chao Yu via Linux-f2fs-devel
2025-03-31 20:10 ` [f2fs-dev] [PATCH 032/153] f2fs: Use a folio in f2fs_get_node_info() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 033/153] f2fs: Use a folio in __get_nat_bitmaps() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 034/153] f2fs: Use a folio in read_compacted_summaries() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 035/153] f2fs: Use a folio in read_normal_summaries() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 036/153] f2fs: Remove f2fs_get_meta_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 037/153] f2fs: Convert f2fs_get_meta_page_retry() to f2fs_get_meta_folio_retry() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 038/153] f2fs: Pass an address to scan_nat_page() Matthew Wilcox (Oracle)
2025-03-31 20:10 ` [f2fs-dev] [PATCH 039/153] f2fs: Add f2fs_get_sum_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 040/153] f2fs: Use folios in do_garbage_collect() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 041/153] f2fs: Use a folio in check_index_in_prev_nodes() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 042/153] f2fs: Use a folio in change_curseg() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 043/153] f2fs: Remove f2fs_get_sum_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 044/153] f2fs: Use a folio in find_in_level() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 045/153] f2fs: Use a folio in f2fs_delete_entry() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 046/153] f2fs: Use a folio in f2fs_readdir() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 047/153] f2fs: Remove f2fs_find_data_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 048/153] f2fs: Use a folio in f2fs_get_new_data_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 049/153] f2fs: Use a folio in f2fs_migrate_blocks() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 050/153] f2fs: Add f2fs_get_new_data_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 051/153] highmem: Add memcpy_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 052/153] f2fs: Use a folio in __clone_blkaddrs() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 053/153] f2fs: Use a folio in f2fs_defragment_range() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 054/153] f2fs: Remove f2fs_get_lock_data_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 055/153] f2fs: Use a folio in fill_zero() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 056/153] f2fs: Use a folio in f2fs_add_regular_entry() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 057/153] f2fs: Use a folio in make_empty_dir() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 058/153] f2fs: Remove f2fs_get_new_data_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 059/153] f2fs: Use a folio in f2fs_xattr_fiemap() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 060/153] f2fs: Use a folio in ra_data_block() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 061/153] f2fs: Use a folio in move_data_block() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 062/153] f2fs: Use a folio in f2fs_convert_inline_inode() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 063/153] f2fs: Use a folio in f2fs_move_inline_dirents() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 064/153] f2fs: Add f2fs_new_node_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 065/153] f2fs: Use a folio in f2fs_ra_node_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 066/153] f2fs: Convert read_node_page() to read_node_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 067/153] f2fs: Pass a folio to f2fs_inode_chksum_verify() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 068/153] f2fs: Use a folio in f2fs_recover_inode_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 069/153] f2fs: Remove f2fs_grab_cache_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 070/153] f2fs: Add f2fs_get_xnode_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 071/153] f2fs: Use a folio in write_all_xattrs() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 072/153] f2fs: Use a folio in f2fs_recover_xattr_data() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 073/153] f2fs: Add f2fs_get_node_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 074/153] f2fs: Use folios in f2fs_get_dnode_of_data() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 075/153] f2fs: Use a folio in truncate_node() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 076/153] f2fs: Use a folio in truncate_nodes() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 077/153] f2fs: Use folios in truncate_partial_nodes() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 078/153] f2fs: Pass a folio to f2fs_ra_node_pages() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 079/153] f2fs: Use a folio in gc_node_segment() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 080/153] f2fs: Convert f2fs_move_node_page() to f2fs_move_node_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 081/153] f2fs: Convert __write_node_page() to __write_node_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 082/153] f2fs: Use a folio in is_alive() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 083/153] f2fs: Use a folio in check_index_in_prev_nodes() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 084/153] f2fs: Remove f2fs_get_node_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 085/153] f2fs: Use a folio in prepare_write_begin Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 086/153] f2fs: Use a folio in __find_data_block() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 087/153] f2fs: Use a folio in f2fs_init_inode_metadata() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 088/153] f2fs: Pass a folio to make_empty_dir() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 089/153] f2fs: Use a folio in f2fs_try_convert_inline_dir() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 090/153] f2fs: Use a folio in f2fs_add_inline_entry() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 091/153] f2fs: Pass a folio to f2fs_move_inline_dirents() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 092/153] f2fs: Pass a folio to f2fs_move_rehashed_dirents() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 093/153] f2fs: Use a folio in f2fs_do_truncate_blocks() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 094/153] f2fs: Use a folio in f2fs_truncate_xattr_node() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 095/153] f2fs: Pass folios to set_new_dnode() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 096/153] f2fs: Convert f2fs_convert_inline_page() to f2fs_convert_inline_folio() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 097/153] f2fs: Use a folio in read_xattr_block() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 098/153] f2fs: Remove f2fs_get_xnode_page() Matthew Wilcox (Oracle)
2025-03-31 20:11 ` [f2fs-dev] [PATCH 099/153] f2fs: Use a folio in f2fs_write_inline_data() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 100/153] f2fs: Use a folio in f2fs_read_inline_data() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 101/153] f2fs: Use a folio in f2fs_recover_inline_data() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 102/153] f2fs: Use a folio in f2fs_find_in_inline_dir() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 103/153] f2fs: Use a folio in f2fs_empty_inline_dir() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 104/153] f2fs: Use a folio in f2fs_read_inline_dir() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 105/153] f2fs: Use a folio in f2fs_inline_data_fiemap() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 106/153] f2fs: Use a folio in f2fs_update_inode_page() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 107/153] f2fs: Use a folio in do_read_inode() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 108/153] f2fs: Pass folios to f2fs_init_acl() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 109/153] f2fs: Pass a folio to f2fs_setxattr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 110/153] f2fs: Pass a folio to __f2fs_setxattr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 111/153] f2fs: Pass a folio to write_all_xattrs() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 112/153] f2fs: Use a folio in read_inline_xattr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 113/153] f2fs: Use a folio in f2fs_recover_inline_xattr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 114/153] f2fs: Remove f2fs_get_inode_page() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 115/153] f2fs: Pass a folio to f2fs_getxattr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 116/153] f2fs: Pass a folio to read_inline_xattr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 117/153] f2fs: Pass a folio to do_recover_data() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 118/153] f2fs: Pass a folio to f2fs_recover_inline_xattr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 119/153] f2fs: Pass a folio to inline_xattr_addr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 120/153] f2fs: Pass a folio to init_dent_inode() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 121/153] f2fs: Pass a folio to f2fs_make_empty_inline_dir() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 122/153] f2fs: Pass a folio to f2fs_has_enough_room() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 123/153] f2fs: Convert dnode_of_data->inode_page to inode_folio Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 124/153] f2fs: Pass a folio to f2fs_do_read_inline_data() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 125/153] f2fs: Pass a folio to f2fs_truncate_inline_inode() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 126/153] f2fs: Pass a folio to __f2fs_find_entry() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 127/153] f2fs: Pass a folio to f2fs_find_entry() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 128/153] f2fs: Pass a folio to f2fs_parent_dir() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 129/153] f2fs: Pass a folio to f2fs_delete_entry() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 130/153] f2fs: Pass a folio to f2fs_delete_inline_entry() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 131/153] f2fs: Pass a folio to f2fs_recover_inline_data() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 132/153] f2fs: Pass a folio to __recover_inline_status() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 133/153] f2fs: Pass a folio to inline_data_addr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 134/153] f2fs: Convert f2fs_put_page_dic() to f2fs_put_folio_dic() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 135/153] f2fs: Pass a folio to f2fs_set_link() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 136/153] f2fs: Use a folio in need_inode_page_update() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 137/153] f2fs: Use a folio in f2fs_truncate_meta_inode_pages() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 138/153] f2fs: Use a folio in f2fs_cache_compressed_page() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 139/153] f2fs: Use a folio in prepare_compress_overwrite() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 140/153] f2fs: Convert f2fs_load_compressed_page() to f2fs_load_compressed_folio() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 141/153] f2fs: Use a folio in f2fs_encrypt_one_page() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 142/153] f2fs: Use a folio in redirty_blocks() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 143/153] f2fs: Use a folio in f2fs_wait_on_block_writeback() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 144/153] f2fs: Pass a folio to f2fs_init_read_extent_tree() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 145/153] f2fs: Return a folio from f2fs_init_inode_metadata() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 146/153] f2fs: Pass a folio to f2fs_update_inode() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 147/153] f2fs: Pass a folio to set_nid() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 148/153] f2fs: Convert dnode_of_data->node_page to node_folio Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 149/153] f2fs: Pass a folio to get_dnode_addr() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 150/153] f2fs: Convert fsync_node_entry->page to folio Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 151/153] f2fs: Remove f2fs_new_node_page() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 152/153] f2fs: Use a folio in flush_inline_data() Matthew Wilcox (Oracle)
2025-03-31 20:12 ` [f2fs-dev] [PATCH 153/153] f2fs: Convert clear_node_page_dirty() to clear_node_folio_dirty() Matthew Wilcox (Oracle)
2025-04-28  7:17 ` [f2fs-dev] [PATCH 000/153] f2fs folio conversions for 6.16 Chao Yu via Linux-f2fs-devel
2025-04-28 15:08   ` Jaegeuk Kim via Linux-f2fs-devel
2025-04-28 22:40 ` patchwork-bot+f2fs--- via Linux-f2fs-devel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).