linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17
@ 2025-07-08 17:02 Matthew Wilcox (Oracle)
  2025-07-08 17:02 ` [f2fs-dev] [PATCH 01/60] f2fs: Pass a folio to recover_dentry() Matthew Wilcox (Oracle)
                   ` (61 more replies)
  0 siblings, 62 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:02 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Some more folio conversions for f2fs.  Again, I have checked these patches
build, but otherwise they are untested.  There are three inline functions
in fscrypt that I change to take a const struct folio pointer instead
of a mutable pointer that I don't think should cause any conflicts.

Matthew Wilcox (Oracle) (60):
  f2fs: Pass a folio to recover_dentry()
  f2fs: Pass a folio to recover_inode()
  f2fs: Pass a folio to recover_quota_data()
  f2fs: Pass a folio to f2fs_recover_inode_page()
  f2fs: Pass a folio to sanity_check_extent_cache()
  f2fs: Pass a folio to sanity_check_inode()
  f2fs: Pass a folio to f2fs_sanity_check_inline_data()
  f2fs: Pass a folio to inode_has_blocks()
  f2fs: Pass a folio to F2FS_INODE()
  f2fs: Pass a folio to ino_of_node()
  f2fs: Pass a folio to nid_of_node()
  f2fs: Pass a folio to is_recoverable_dnode()
  f2fs: Pass a folio to set_dentry_mark()
  f2fs: Pass a folio to set_fsync_mark()
  f2fs: Pass a folio to set_mark()
  f2fs: Pass a folio to f2fs_allocate_data_block()
  f2fs: Pass a folio to f2fs_inode_chksum_set()
  f2fs: Pass a folio to f2fs_enable_inode_chksum()
  f2fs: Pass a folio to f2fs_inode_chksum()
  f2fs: Pass a folio to fill_node_footer_blkaddr()
  f2fs: Pass a folio to get_nid()
  f2fs: Pass a folio to set_cold_node()
  f2fs: Pass folios to copy_node_footer()
  f2fs: Pass a folio to fill_node_footer()
  f2fs: Pass a folio to cpver_of_node()
  f2fs: Pass a folio to f2fs_recover_xattr_data()
  f2fs: Pass a folio to is_fsync_dnode()
  f2fs: Pass a folio to is_dent_dnode()
  f2fs: Add fio->folio
  f2fs: Use folio_unlock() in f2fs_write_compressed_pages()
  f2fs: Pass a folio to is_cold_node()
  f2fs: Pass a folio to is_node()
  f2fs: Pass a folio to IS_DNODE()
  f2fs: Pass a folio to ofs_of_node()
  f2fs: Pass a folio to get_dnode_base()
  f2fs: Pass a folio to ADDRS_PER_PAGE()
  f2fs: Pass a folio to IS_INODE()
  f2fs: Add folio counterparts to page_private_flags functions
  f2fs: Use a folio in f2fs_is_cp_guaranteed()
  f2fs: Convert set_page_private_data() to folio_set_f2fs_data()
  f2fs: Convert get_page_private_data() to folio_get_f2fs_data()
  f2fs: Pass a folio to f2fs_compress_write_end_io()
  f2fs: Use a folio in f2fs_merge_page_bio()
  f2fs: Use a bio in f2fs_submit_page_write()
  f2fs: Pass a folio to WB_DATA_TYPE() and f2fs_is_cp_guaranteed()
  f2fs: Use a folio iterator in f2fs_handle_step_decompress()
  f2fs: Pass a folio to f2fs_end_read_compressed_page()
  f2fs: Use a folio iterator in f2fs_verify_bio()
  f2fs: Pass a folio to f2fs_is_compressed_page()
  f2fs: Convert get_next_nat_page() to get_next_nat_folio()
  f2fs: Pass the nat_blk to __update_nat_bits()
  f2fs: Pass a folio to F2FS_NODE()
  f2fs: Pass a folio to f2fs_cache_compressed_page()
  f2fs: Use a folio in f2fs_encrypted_get_link()
  f2fs: Use F2FS_F_SB() in f2fs_read_end_io()
  f2fs: Remove clear_page_private_all()
  f2fs: Remove use of page from f2fs_write_single_data_page()
  f2fs: Pass a folio to f2fs_submit_merged_write_cond()
  f2fs: Pass a folio to __has_merged_page()
  f2fs: Remove F2FS_P_SB()

 fs/f2fs/checkpoint.c    |   8 +-
 fs/f2fs/compress.c      |  44 +++++------
 fs/f2fs/data.c          | 138 +++++++++++++++++-----------------
 fs/f2fs/dir.c           |   4 +-
 fs/f2fs/extent_cache.c  |   8 +-
 fs/f2fs/f2fs.h          | 135 +++++++++++++++++----------------
 fs/f2fs/file.c          |  28 +++----
 fs/f2fs/gc.c            |  18 ++---
 fs/f2fs/inline.c        |  20 ++---
 fs/f2fs/inode.c         |  61 +++++++--------
 fs/f2fs/namei.c         |  12 +--
 fs/f2fs/node.c          | 162 ++++++++++++++++++++--------------------
 fs/f2fs/node.h          |  75 ++++++++++---------
 fs/f2fs/recovery.c      |  78 +++++++++----------
 fs/f2fs/segment.c       |  27 ++++---
 include/linux/f2fs_fs.h |   2 +-
 include/linux/fscrypt.h |   7 +-
 17 files changed, 414 insertions(+), 413 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] 65+ messages in thread

* [f2fs-dev] [PATCH 01/60] f2fs: Pass a folio to recover_dentry()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
@ 2025-07-08 17:02 ` Matthew Wilcox (Oracle)
  2025-07-08 17:02 ` [f2fs-dev] [PATCH 02/60] f2fs: Pass a folio to recover_inode() Matthew Wilcox (Oracle)
                   ` (60 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:02 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/recovery.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 51ebed4e1521..f84a96deaa07 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -157,10 +157,10 @@ static int init_recovered_filename(const struct inode *dir,
 	return 0;
 }
 
-static int recover_dentry(struct inode *inode, struct page *ipage,
+static int recover_dentry(struct inode *inode, struct folio *ifolio,
 						struct list_head *dir_list)
 {
-	struct f2fs_inode *raw_inode = F2FS_INODE(ipage);
+	struct f2fs_inode *raw_inode = F2FS_INODE(&ifolio->page);
 	nid_t pino = le32_to_cpu(raw_inode->i_pino);
 	struct f2fs_dir_entry *de;
 	struct f2fs_filename fname;
@@ -233,7 +233,7 @@ static int recover_dentry(struct inode *inode, struct page *ipage,
 	else
 		name = raw_inode->i_name;
 	f2fs_notice(F2FS_I_SB(inode), "%s: ino = %x, name = %s, dir = %lx, err = %d",
-		    __func__, ino_of_node(ipage), name,
+		    __func__, ino_of_node(&ifolio->page), name,
 		    IS_ERR(dir) ? 0 : dir->i_ino, err);
 	return err;
 }
@@ -817,7 +817,7 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 			}
 		}
 		if (entry->last_dentry == blkaddr) {
-			err = recover_dentry(entry->inode, &folio->page, dir_list);
+			err = recover_dentry(entry->inode, folio, dir_list);
 			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] 65+ messages in thread

* [f2fs-dev] [PATCH 02/60] f2fs: Pass a folio to recover_inode()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
  2025-07-08 17:02 ` [f2fs-dev] [PATCH 01/60] f2fs: Pass a folio to recover_dentry() Matthew Wilcox (Oracle)
@ 2025-07-08 17:02 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 03/60] f2fs: Pass a folio to recover_quota_data() Matthew Wilcox (Oracle)
                   ` (59 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:02 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/recovery.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index f84a96deaa07..dacfe7c1cbe5 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -277,16 +277,16 @@ static void recover_inline_flags(struct inode *inode, struct f2fs_inode *ri)
 		clear_inode_flag(inode, FI_DATA_EXIST);
 }
 
-static int recover_inode(struct inode *inode, struct page *page)
+static int recover_inode(struct inode *inode, struct folio *folio)
 {
-	struct f2fs_inode *raw = F2FS_INODE(page);
+	struct f2fs_inode *raw = F2FS_INODE(&folio->page);
 	struct f2fs_inode_info *fi = F2FS_I(inode);
 	char *name;
 	int err;
 
 	inode->i_mode = le16_to_cpu(raw->i_mode);
 
-	err = recover_quota_data(inode, page);
+	err = recover_quota_data(inode, &folio->page);
 	if (err)
 		return err;
 
@@ -333,10 +333,10 @@ static int recover_inode(struct inode *inode, struct page *page)
 	if (file_enc_name(inode))
 		name = "<encrypted>";
 	else
-		name = F2FS_INODE(page)->i_name;
+		name = F2FS_INODE(&folio->page)->i_name;
 
 	f2fs_notice(F2FS_I_SB(inode), "recover_inode: ino = %x, name = %s, inline = %x",
-		    ino_of_node(page), name, raw->i_inline);
+		    ino_of_node(&folio->page), name, raw->i_inline);
 	return 0;
 }
 
@@ -810,7 +810,7 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 		 * So, call recover_inode for the inode update.
 		 */
 		if (IS_INODE(&folio->page)) {
-			err = recover_inode(entry->inode, &folio->page);
+			err = recover_inode(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] 65+ messages in thread

* [f2fs-dev] [PATCH 03/60] f2fs: Pass a folio to recover_quota_data()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
  2025-07-08 17:02 ` [f2fs-dev] [PATCH 01/60] f2fs: Pass a folio to recover_dentry() Matthew Wilcox (Oracle)
  2025-07-08 17:02 ` [f2fs-dev] [PATCH 02/60] f2fs: Pass a folio to recover_inode() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 04/60] f2fs: Pass a folio to f2fs_recover_inode_page() Matthew Wilcox (Oracle)
                   ` (58 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/recovery.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index dacfe7c1cbe5..10212130097c 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -238,9 +238,9 @@ static int recover_dentry(struct inode *inode, struct folio *ifolio,
 	return err;
 }
 
-static int recover_quota_data(struct inode *inode, struct page *page)
+static int recover_quota_data(struct inode *inode, struct folio *folio)
 {
-	struct f2fs_inode *raw = F2FS_INODE(page);
+	struct f2fs_inode *raw = F2FS_INODE(&folio->page);
 	struct iattr attr;
 	uid_t i_uid = le32_to_cpu(raw->i_uid);
 	gid_t i_gid = le32_to_cpu(raw->i_gid);
@@ -286,7 +286,7 @@ static int recover_inode(struct inode *inode, struct folio *folio)
 
 	inode->i_mode = le16_to_cpu(raw->i_mode);
 
-	err = recover_quota_data(inode, &folio->page);
+	err = recover_quota_data(inode, folio);
 	if (err)
 		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] 65+ messages in thread

* [f2fs-dev] [PATCH 04/60] f2fs: Pass a folio to f2fs_recover_inode_page()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (2 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 03/60] f2fs: Pass a folio to recover_quota_data() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 05/60] f2fs: Pass a folio to sanity_check_extent_cache() Matthew Wilcox (Oracle)
                   ` (57 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/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 aa535dcf2297..1243264f4170 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3790,7 +3790,7 @@ 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 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_recover_inode_page(struct f2fs_sb_info *sbi, struct folio *folio);
 int f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
 			unsigned int segno, struct f2fs_summary_block *sum);
 int f2fs_flush_nat_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 2fd287f2bca4..742f9f750390 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2801,10 +2801,10 @@ int f2fs_recover_xattr_data(struct inode *inode, struct page *page)
 	return 0;
 }
 
-int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
+int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct folio *folio)
 {
 	struct f2fs_inode *src, *dst;
-	nid_t ino = ino_of_node(page);
+	nid_t ino = ino_of_node(&folio->page);
 	struct node_info old_ni, new_ni;
 	struct folio *ifolio;
 	int err;
@@ -2830,7 +2830,7 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
 	fill_node_footer(&ifolio->page, ino, ino, 0, true);
 	set_cold_node(&ifolio->page, false);
 
-	src = F2FS_INODE(page);
+	src = F2FS_INODE(&folio->page);
 	dst = F2FS_INODE(&ifolio->page);
 
 	memcpy(dst, src, offsetof(struct f2fs_inode, i_ext));
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 10212130097c..7768e10fc183 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -439,7 +439,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 			if (!check_only &&
 					IS_INODE(&folio->page) &&
 					is_dent_dnode(&folio->page)) {
-				err = f2fs_recover_inode_page(sbi, &folio->page);
+				err = f2fs_recover_inode_page(sbi, 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] 65+ messages in thread

* [f2fs-dev] [PATCH 05/60] f2fs: Pass a folio to sanity_check_extent_cache()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (3 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 04/60] f2fs: Pass a folio to f2fs_recover_inode_page() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 06/60] f2fs: Pass a folio to sanity_check_inode() Matthew Wilcox (Oracle)
                   ` (56 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/extent_cache.c | 4 ++--
 fs/f2fs/f2fs.h         | 2 +-
 fs/f2fs/inode.c        | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index cfe925a3d555..41b08814242c 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -19,10 +19,10 @@
 #include "node.h"
 #include <trace/events/f2fs.h>
 
-bool sanity_check_extent_cache(struct inode *inode, struct page *ipage)
+bool sanity_check_extent_cache(struct inode *inode, struct folio *ifolio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	struct f2fs_extent *i_ext = &F2FS_INODE(ipage)->i_ext;
+	struct f2fs_extent *i_ext = &F2FS_INODE(&ifolio->page)->i_ext;
 	struct extent_info ei;
 	int devi;
 
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 1243264f4170..d278b5117629 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4350,7 +4350,7 @@ void f2fs_leave_shrinker(struct f2fs_sb_info *sbi);
 /*
  * extent_cache.c
  */
-bool sanity_check_extent_cache(struct inode *inode, struct page *ipage);
+bool sanity_check_extent_cache(struct inode *inode, struct folio *ifolio);
 void f2fs_init_extent_tree(struct inode *inode);
 void f2fs_drop_extent_tree(struct inode *inode);
 void f2fs_destroy_extent_node(struct inode *inode);
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 083d52a42bfb..6ce6279e4eb5 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -531,7 +531,7 @@ static int do_read_inode(struct inode *inode)
 
 	init_idisk_time(inode);
 
-	if (!sanity_check_extent_cache(inode, &node_folio->page)) {
+	if (!sanity_check_extent_cache(inode, node_folio)) {
 		f2fs_folio_put(node_folio, true);
 		f2fs_handle_error(sbi, ERROR_CORRUPTED_INODE);
 		return -EFSCORRUPTED;
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 06/60] f2fs: Pass a folio to sanity_check_inode()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (4 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 05/60] f2fs: Pass a folio to sanity_check_extent_cache() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 07/60] f2fs: Pass a folio to f2fs_sanity_check_inline_data() Matthew Wilcox (Oracle)
                   ` (55 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/inode.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 6ce6279e4eb5..6b91531f79a4 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -266,28 +266,28 @@ static bool sanity_check_compress_inode(struct inode *inode,
 	return false;
 }
 
-static bool sanity_check_inode(struct inode *inode, struct page *node_page)
+static bool sanity_check_inode(struct inode *inode, struct folio *node_folio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct f2fs_inode_info *fi = F2FS_I(inode);
-	struct f2fs_inode *ri = F2FS_INODE(node_page);
+	struct f2fs_inode *ri = F2FS_INODE(&node_folio->page);
 	unsigned long long iblocks;
 
-	iblocks = le64_to_cpu(F2FS_INODE(node_page)->i_blocks);
+	iblocks = le64_to_cpu(F2FS_INODE(&node_folio->page)->i_blocks);
 	if (!iblocks) {
 		f2fs_warn(sbi, "%s: corrupted inode i_blocks i_ino=%lx iblocks=%llu, run fsck to fix.",
 			  __func__, inode->i_ino, iblocks);
 		return false;
 	}
 
-	if (ino_of_node(node_page) != nid_of_node(node_page)) {
+	if (ino_of_node(&node_folio->page) != nid_of_node(&node_folio->page)) {
 		f2fs_warn(sbi, "%s: corrupted inode footer i_ino=%lx, ino,nid: [%u, %u] run fsck to fix.",
 			  __func__, inode->i_ino,
-			  ino_of_node(node_page), nid_of_node(node_page));
+			  ino_of_node(&node_folio->page), nid_of_node(&node_folio->page));
 		return false;
 	}
 
-	if (ino_of_node(node_page) == fi->i_xattr_nid) {
+	if (ino_of_node(&node_folio->page) == fi->i_xattr_nid) {
 		f2fs_warn(sbi, "%s: corrupted inode i_ino=%lx, xnid=%x, run fsck to fix.",
 			  __func__, inode->i_ino, fi->i_xattr_nid);
 		return false;
@@ -354,7 +354,7 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
 		}
 	}
 
-	if (f2fs_sanity_check_inline_data(inode, node_page)) {
+	if (f2fs_sanity_check_inline_data(inode, &node_folio->page)) {
 		f2fs_warn(sbi, "%s: inode (ino=%lx, mode=%u) should not have inline_data, run fsck to fix",
 			  __func__, inode->i_ino, inode->i_mode);
 		return false;
@@ -469,7 +469,7 @@ static int do_read_inode(struct inode *inode)
 		fi->i_inline_xattr_size = 0;
 	}
 
-	if (!sanity_check_inode(inode, &node_folio->page)) {
+	if (!sanity_check_inode(inode, node_folio)) {
 		f2fs_folio_put(node_folio, true);
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_handle_error(sbi, ERROR_CORRUPTED_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] 65+ messages in thread

* [f2fs-dev] [PATCH 07/60] f2fs: Pass a folio to f2fs_sanity_check_inline_data()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (5 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 06/60] f2fs: Pass a folio to sanity_check_inode() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 08/60] f2fs: Pass a folio to inode_has_blocks() Matthew Wilcox (Oracle)
                   ` (54 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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 | 4 ++--
 fs/f2fs/inode.c  | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index d278b5117629..0e33c971aff7 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4308,7 +4308,7 @@ extern struct kmem_cache *f2fs_inode_entry_slab;
  * inline.c
  */
 bool f2fs_may_inline_data(struct inode *inode);
-bool f2fs_sanity_check_inline_data(struct inode *inode, struct page *ipage);
+bool f2fs_sanity_check_inline_data(struct inode *inode, struct folio *ifolio);
 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 folio *ifolio,
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 901c630685ce..0d021c638922 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -48,12 +48,12 @@ static bool inode_has_blocks(struct inode *inode, struct page *ipage)
 	return false;
 }
 
-bool f2fs_sanity_check_inline_data(struct inode *inode, struct page *ipage)
+bool f2fs_sanity_check_inline_data(struct inode *inode, struct folio *ifolio)
 {
 	if (!f2fs_has_inline_data(inode))
 		return false;
 
-	if (inode_has_blocks(inode, ipage))
+	if (inode_has_blocks(inode, &ifolio->page))
 		return false;
 
 	if (!support_inline_data(inode))
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 6b91531f79a4..b7324c583683 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -354,7 +354,7 @@ static bool sanity_check_inode(struct inode *inode, struct folio *node_folio)
 		}
 	}
 
-	if (f2fs_sanity_check_inline_data(inode, &node_folio->page)) {
+	if (f2fs_sanity_check_inline_data(inode, node_folio)) {
 		f2fs_warn(sbi, "%s: inode (ino=%lx, mode=%u) should not have inline_data, run fsck to fix",
 			  __func__, inode->i_ino, inode->i_mode);
 		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] 65+ messages in thread

* [f2fs-dev] [PATCH 08/60] f2fs: Pass a folio to inode_has_blocks()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (6 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 07/60] f2fs: Pass a folio to f2fs_sanity_check_inline_data() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 09/60] f2fs: Pass a folio to F2FS_INODE() Matthew Wilcox (Oracle)
                   ` (53 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/inline.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 0d021c638922..fa072e4a5616 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -33,9 +33,9 @@ bool f2fs_may_inline_data(struct inode *inode)
 	return !f2fs_post_read_required(inode);
 }
 
-static bool inode_has_blocks(struct inode *inode, struct page *ipage)
+static bool inode_has_blocks(struct inode *inode, struct folio *ifolio)
 {
-	struct f2fs_inode *ri = F2FS_INODE(ipage);
+	struct f2fs_inode *ri = F2FS_INODE(&ifolio->page);
 	int i;
 
 	if (F2FS_HAS_BLOCKS(inode))
@@ -53,7 +53,7 @@ bool f2fs_sanity_check_inline_data(struct inode *inode, struct folio *ifolio)
 	if (!f2fs_has_inline_data(inode))
 		return false;
 
-	if (inode_has_blocks(inode, &ifolio->page))
+	if (inode_has_blocks(inode, ifolio))
 		return false;
 
 	if (!support_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] 65+ messages in thread

* [f2fs-dev] [PATCH 09/60] f2fs: Pass a folio to F2FS_INODE()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (7 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 08/60] f2fs: Pass a folio to inode_has_blocks() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 10/60] f2fs: Pass a folio to ino_of_node() Matthew Wilcox (Oracle)
                   ` (52 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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.  Also make it const as
F2FS_INODE() does not modify the struct folio passed in (the data it
describes is mutable, but it does not change the contents of the struct).
This may improve code generation.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/dir.c          |  2 +-
 fs/f2fs/extent_cache.c |  4 ++--
 fs/f2fs/f2fs.h         |  9 +++++----
 fs/f2fs/gc.c           |  2 +-
 fs/f2fs/inline.c       |  6 +++---
 fs/f2fs/inode.c        | 10 +++++-----
 fs/f2fs/node.c         |  8 ++++----
 fs/f2fs/recovery.c     |  8 ++++----
 8 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index c36b3b22bfff..888dca7e82ac 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -454,7 +454,7 @@ static void init_dent_inode(struct inode *dir, struct inode *inode,
 	f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 
 	/* copy name info. to this inode folio */
-	ri = F2FS_INODE(&ifolio->page);
+	ri = F2FS_INODE(ifolio);
 	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)) {
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index 41b08814242c..a5d5bc8c0da5 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -22,7 +22,7 @@
 bool sanity_check_extent_cache(struct inode *inode, struct folio *ifolio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	struct f2fs_extent *i_ext = &F2FS_INODE(&ifolio->page)->i_ext;
+	struct f2fs_extent *i_ext = &F2FS_INODE(ifolio)->i_ext;
 	struct extent_info ei;
 	int devi;
 
@@ -411,7 +411,7 @@ 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(&ifolio->page)->i_ext;
+	struct f2fs_extent *i_ext = &F2FS_INODE(ifolio)->i_ext;
 	struct extent_tree *et;
 	struct extent_node *en;
 	struct extent_info ei;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 0e33c971aff7..5e443b2ce8db 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2053,9 +2053,9 @@ static inline struct f2fs_node *F2FS_NODE(const struct page *page)
 	return (struct f2fs_node *)page_address(page);
 }
 
-static inline struct f2fs_inode *F2FS_INODE(struct page *page)
+static inline struct f2fs_inode *F2FS_INODE(const struct folio *folio)
 {
-	return &((struct f2fs_node *)page_address(page))->i;
+	return &((struct f2fs_node *)folio_address(folio))->i;
 }
 
 static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi)
@@ -3371,9 +3371,10 @@ static inline unsigned int addrs_per_page(struct inode *inode,
 	return addrs;
 }
 
-static inline void *inline_xattr_addr(struct inode *inode, struct folio *folio)
+static inline
+void *inline_xattr_addr(struct inode *inode, const struct folio *folio)
 {
-	struct f2fs_inode *ri = F2FS_INODE(&folio->page);
+	struct f2fs_inode *ri = F2FS_INODE(folio);
 
 	return (void *)&(ri->i_addr[DEF_ADDRS_PER_INODE -
 					get_inline_xattr_addrs(inode)]);
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 30b95ebb4499..fc262d6dff3d 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1163,7 +1163,7 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	}
 
 	if (IS_INODE(&node_folio->page)) {
-		base = offset_in_addr(F2FS_INODE(&node_folio->page));
+		base = offset_in_addr(F2FS_INODE(node_folio));
 		max_addrs = DEF_ADDRS_PER_INODE;
 	} else {
 		base = 0;
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index fa072e4a5616..4c636a8043f8 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -35,7 +35,7 @@ bool f2fs_may_inline_data(struct inode *inode)
 
 static bool inode_has_blocks(struct inode *inode, struct folio *ifolio)
 {
-	struct f2fs_inode *ri = F2FS_INODE(&ifolio->page);
+	struct f2fs_inode *ri = F2FS_INODE(ifolio);
 	int i;
 
 	if (F2FS_HAS_BLOCKS(inode))
@@ -306,7 +306,7 @@ int f2fs_recover_inline_data(struct inode *inode, struct folio *nfolio)
 	 *    x       x  -> recover data blocks
 	 */
 	if (IS_INODE(&nfolio->page))
-		ri = F2FS_INODE(&nfolio->page);
+		ri = F2FS_INODE(nfolio);
 
 	if (f2fs_has_inline_data(inode) &&
 			ri && (ri->i_inline & F2FS_INLINE_DATA)) {
@@ -825,7 +825,7 @@ int f2fs_inline_data_fiemap(struct inode *inode,
 
 	byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits;
 	byteaddr += (char *)inline_data_addr(inode, ifolio) -
-					(char *)F2FS_INODE(&ifolio->page);
+					(char *)F2FS_INODE(ifolio);
 	err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags);
 	trace_f2fs_fiemap(inode, start, byteaddr, ilen, flags, err);
 out:
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index b7324c583683..c6c62fbbab6e 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -108,7 +108,7 @@ static void __recover_inline_status(struct inode *inode, struct folio *ifolio)
 			f2fs_folio_wait_writeback(ifolio, NODE, true, true);
 
 			set_inode_flag(inode, FI_DATA_EXIST);
-			set_raw_inline(inode, F2FS_INODE(&ifolio->page));
+			set_raw_inline(inode, F2FS_INODE(ifolio));
 			folio_mark_dirty(ifolio);
 			return;
 		}
@@ -270,10 +270,10 @@ static bool sanity_check_inode(struct inode *inode, struct folio *node_folio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct f2fs_inode_info *fi = F2FS_I(inode);
-	struct f2fs_inode *ri = F2FS_INODE(&node_folio->page);
+	struct f2fs_inode *ri = F2FS_INODE(node_folio);
 	unsigned long long iblocks;
 
-	iblocks = le64_to_cpu(F2FS_INODE(&node_folio->page)->i_blocks);
+	iblocks = le64_to_cpu(F2FS_INODE(node_folio)->i_blocks);
 	if (!iblocks) {
 		f2fs_warn(sbi, "%s: corrupted inode i_blocks i_ino=%lx iblocks=%llu, run fsck to fix.",
 			  __func__, inode->i_ino, iblocks);
@@ -419,7 +419,7 @@ static int do_read_inode(struct inode *inode)
 	if (IS_ERR(node_folio))
 		return PTR_ERR(node_folio);
 
-	ri = F2FS_INODE(&node_folio->page);
+	ri = F2FS_INODE(node_folio);
 
 	inode->i_mode = le16_to_cpu(ri->i_mode);
 	i_uid_write(inode, le32_to_cpu(ri->i_uid));
@@ -669,7 +669,7 @@ void f2fs_update_inode(struct inode *inode, struct folio *node_folio)
 
 	f2fs_inode_synced(inode);
 
-	ri = F2FS_INODE(&node_folio->page);
+	ri = F2FS_INODE(node_folio);
 
 	ri->i_mode = cpu_to_le16(inode->i_mode);
 	ri->i_advise = fi->i_advise;
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 742f9f750390..e97b6e2ddbfb 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1172,7 +1172,7 @@ int f2fs_truncate_inode_blocks(struct inode *inode, pgoff_t from)
 	set_new_dnode(&dn, inode, folio, NULL, 0);
 	folio_unlock(folio);
 
-	ri = F2FS_INODE(&folio->page);
+	ri = F2FS_INODE(folio);
 	switch (level) {
 	case 0:
 	case 1:
@@ -2727,7 +2727,7 @@ int f2fs_recover_inline_xattr(struct inode *inode, struct folio *folio)
 	if (IS_ERR(ifolio))
 		return PTR_ERR(ifolio);
 
-	ri = F2FS_INODE(&folio->page);
+	ri = F2FS_INODE(folio);
 	if (ri->i_inline & F2FS_INLINE_XATTR) {
 		if (!f2fs_has_inline_xattr(inode)) {
 			set_inode_flag(inode, FI_INLINE_XATTR);
@@ -2830,8 +2830,8 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct folio *folio)
 	fill_node_footer(&ifolio->page, ino, ino, 0, true);
 	set_cold_node(&ifolio->page, false);
 
-	src = F2FS_INODE(&folio->page);
-	dst = F2FS_INODE(&ifolio->page);
+	src = F2FS_INODE(folio);
+	dst = F2FS_INODE(ifolio);
 
 	memcpy(dst, src, offsetof(struct f2fs_inode, i_ext));
 	dst->i_size = 0;
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 7768e10fc183..7e408016b1bc 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -160,7 +160,7 @@ static int init_recovered_filename(const struct inode *dir,
 static int recover_dentry(struct inode *inode, struct folio *ifolio,
 						struct list_head *dir_list)
 {
-	struct f2fs_inode *raw_inode = F2FS_INODE(&ifolio->page);
+	struct f2fs_inode *raw_inode = F2FS_INODE(ifolio);
 	nid_t pino = le32_to_cpu(raw_inode->i_pino);
 	struct f2fs_dir_entry *de;
 	struct f2fs_filename fname;
@@ -240,7 +240,7 @@ static int recover_dentry(struct inode *inode, struct folio *ifolio,
 
 static int recover_quota_data(struct inode *inode, struct folio *folio)
 {
-	struct f2fs_inode *raw = F2FS_INODE(&folio->page);
+	struct f2fs_inode *raw = F2FS_INODE(folio);
 	struct iattr attr;
 	uid_t i_uid = le32_to_cpu(raw->i_uid);
 	gid_t i_gid = le32_to_cpu(raw->i_gid);
@@ -279,7 +279,7 @@ static void recover_inline_flags(struct inode *inode, struct f2fs_inode *ri)
 
 static int recover_inode(struct inode *inode, struct folio *folio)
 {
-	struct f2fs_inode *raw = F2FS_INODE(&folio->page);
+	struct f2fs_inode *raw = F2FS_INODE(folio);
 	struct f2fs_inode_info *fi = F2FS_I(inode);
 	char *name;
 	int err;
@@ -333,7 +333,7 @@ static int recover_inode(struct inode *inode, struct folio *folio)
 	if (file_enc_name(inode))
 		name = "<encrypted>";
 	else
-		name = F2FS_INODE(&folio->page)->i_name;
+		name = F2FS_INODE(folio)->i_name;
 
 	f2fs_notice(F2FS_I_SB(inode), "recover_inode: ino = %x, name = %s, inline = %x",
 		    ino_of_node(&folio->page), name, raw->i_inline);
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 10/60] f2fs: Pass a folio to ino_of_node()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (8 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 09/60] f2fs: Pass a folio to F2FS_INODE() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 11/60] f2fs: Pass a folio to nid_of_node() Matthew Wilcox (Oracle)
                   ` (51 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.  Also make the argument const
as the function does not modify it.

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

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 31e892842625..b023d15b4555 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -574,7 +574,7 @@ static bool __has_merged_page(struct bio *bio, struct inode *inode,
 			return true;
 		if (page && page == &target->page)
 			return true;
-		if (ino && ino == ino_of_node(&target->page))
+		if (ino && ino == ino_of_node(target))
 			return true;
 	}
 
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index c6c62fbbab6e..eedc56a3561b 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -178,7 +178,7 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct folio *folio)
 
 	if (provided != calculated)
 		f2fs_warn(sbi, "checksum invalid, nid = %lu, ino_of_node = %x, %x vs. %x",
-			  folio->index, ino_of_node(&folio->page),
+			  folio->index, ino_of_node(folio),
 			  provided, calculated);
 
 	return provided == calculated;
@@ -280,14 +280,14 @@ static bool sanity_check_inode(struct inode *inode, struct folio *node_folio)
 		return false;
 	}
 
-	if (ino_of_node(&node_folio->page) != nid_of_node(&node_folio->page)) {
+	if (ino_of_node(node_folio) != nid_of_node(&node_folio->page)) {
 		f2fs_warn(sbi, "%s: corrupted inode footer i_ino=%lx, ino,nid: [%u, %u] run fsck to fix.",
 			  __func__, inode->i_ino,
-			  ino_of_node(&node_folio->page), nid_of_node(&node_folio->page));
+			  ino_of_node(node_folio), nid_of_node(&node_folio->page));
 		return false;
 	}
 
-	if (ino_of_node(&node_folio->page) == fi->i_xattr_nid) {
+	if (ino_of_node(node_folio) == fi->i_xattr_nid) {
 		f2fs_warn(sbi, "%s: corrupted inode i_ino=%lx, xnid=%x, run fsck to fix.",
 			  __func__, inode->i_ino, fi->i_xattr_nid);
 		return false;
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index e97b6e2ddbfb..fabcb3fa47cd 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -974,9 +974,9 @@ static int truncate_dnode(struct dnode_of_data *dn)
 	else if (IS_ERR(folio))
 		return PTR_ERR(folio);
 
-	if (IS_INODE(&folio->page) || ino_of_node(&folio->page) != dn->inode->i_ino) {
+	if (IS_INODE(&folio->page) || ino_of_node(folio) != 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(&folio->page));
+				dn->inode->i_ino, dn->nid, ino_of_node(folio));
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_handle_error(sbi, ERROR_INVALID_NODE_REFERENCE);
 		f2fs_folio_put(folio, true);
@@ -1484,7 +1484,7 @@ static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
 		time_to_inject(sbi, FAULT_INCONSISTENT_FOOTER))) {
 		f2fs_warn(sbi, "inconsistent node block, node_type:%d, nid:%lu, "
 			  "node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]",
-			  ntype, nid, nid_of_node(page), ino_of_node(page),
+			  ntype, nid, nid_of_node(page), ino_of_node(folio),
 			  ofs_of_node(page), cpver_of_node(page),
 			  next_blkaddr_of_node(folio));
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
@@ -1633,7 +1633,7 @@ static struct folio *last_fsync_dnode(struct f2fs_sb_info *sbi, nid_t ino)
 
 			if (!IS_DNODE(&folio->page) || !is_cold_node(&folio->page))
 				continue;
-			if (ino_of_node(&folio->page) != ino)
+			if (ino_of_node(folio) != ino)
 				continue;
 
 			folio_lock(folio);
@@ -1643,7 +1643,7 @@ static struct folio *last_fsync_dnode(struct f2fs_sb_info *sbi, nid_t ino)
 				folio_unlock(folio);
 				continue;
 			}
-			if (ino_of_node(&folio->page) != ino)
+			if (ino_of_node(folio) != ino)
 				goto continue_unlock;
 
 			if (!folio_test_dirty(folio)) {
@@ -1673,7 +1673,7 @@ static bool __write_node_folio(struct folio *folio, bool atomic, bool *submitted
 	struct node_info ni;
 	struct f2fs_io_info fio = {
 		.sbi = sbi,
-		.ino = ino_of_node(&folio->page),
+		.ino = ino_of_node(folio),
 		.type = NODE,
 		.op = REQ_OP_WRITE,
 		.op_flags = wbc_to_write_flags(wbc),
@@ -1842,7 +1842,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 
 			if (!IS_DNODE(&folio->page) || !is_cold_node(&folio->page))
 				continue;
-			if (ino_of_node(&folio->page) != ino)
+			if (ino_of_node(folio) != ino)
 				continue;
 
 			folio_lock(folio);
@@ -1852,7 +1852,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 				folio_unlock(folio);
 				continue;
 			}
-			if (ino_of_node(&folio->page) != ino)
+			if (ino_of_node(folio) != ino)
 				goto continue_unlock;
 
 			if (!folio_test_dirty(folio) && folio != last_folio) {
@@ -1948,7 +1948,7 @@ static bool flush_dirty_inode(struct folio *folio)
 {
 	struct f2fs_sb_info *sbi = F2FS_F_SB(folio);
 	struct inode *inode;
-	nid_t ino = ino_of_node(&folio->page);
+	nid_t ino = ino_of_node(folio);
 
 	inode = find_inode_nowait(sbi->sb, ino, f2fs_match_ino, NULL);
 	if (!inode)
@@ -1991,7 +1991,7 @@ void f2fs_flush_inline_data(struct f2fs_sb_info *sbi)
 			if (page_private_inline(&folio->page)) {
 				clear_page_private_inline(&folio->page);
 				folio_unlock(folio);
-				flush_inline_data(sbi, ino_of_node(&folio->page));
+				flush_inline_data(sbi, ino_of_node(folio));
 				continue;
 			}
 unlock:
@@ -2073,7 +2073,7 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 			if (page_private_inline(&folio->page)) {
 				clear_page_private_inline(&folio->page);
 				folio_unlock(folio);
-				flush_inline_data(sbi, ino_of_node(&folio->page));
+				flush_inline_data(sbi, ino_of_node(folio));
 				goto lock_node;
 			}
 
@@ -2804,7 +2804,7 @@ int f2fs_recover_xattr_data(struct inode *inode, struct page *page)
 int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct folio *folio)
 {
 	struct f2fs_inode *src, *dst;
-	nid_t ino = ino_of_node(&folio->page);
+	nid_t ino = ino_of_node(folio);
 	struct node_info old_ni, new_ni;
 	struct folio *ifolio;
 	int err;
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 1446c433b3ec..6c4fc3449a68 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -243,9 +243,9 @@ static inline void set_to_next_nat(struct f2fs_nm_info *nm_i, nid_t start_nid)
 #endif
 }
 
-static inline nid_t ino_of_node(struct page *node_page)
+static inline nid_t ino_of_node(const 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.ino);
 }
 
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 7e408016b1bc..224754186096 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -233,7 +233,7 @@ static int recover_dentry(struct inode *inode, struct folio *ifolio,
 	else
 		name = raw_inode->i_name;
 	f2fs_notice(F2FS_I_SB(inode), "%s: ino = %x, name = %s, dir = %lx, err = %d",
-		    __func__, ino_of_node(&ifolio->page), name,
+		    __func__, ino_of_node(ifolio), name,
 		    IS_ERR(dir) ? 0 : dir->i_ino, err);
 	return err;
 }
@@ -336,7 +336,7 @@ static int recover_inode(struct inode *inode, struct folio *folio)
 		name = F2FS_INODE(folio)->i_name;
 
 	f2fs_notice(F2FS_I_SB(inode), "recover_inode: ino = %x, name = %s, inline = %x",
-		    ino_of_node(&folio->page), name, raw->i_inline);
+		    ino_of_node(folio), name, raw->i_inline);
 	return 0;
 }
 
@@ -432,7 +432,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 		if (!is_fsync_dnode(&folio->page))
 			goto next;
 
-		entry = get_fsync_inode(head, ino_of_node(&folio->page));
+		entry = get_fsync_inode(head, ino_of_node(folio));
 		if (!entry) {
 			bool quota_inode = false;
 
@@ -451,7 +451,7 @@ 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(&folio->page),
+			entry = add_fsync_inode(sbi, head, ino_of_node(folio),
 								quota_inode);
 			if (IS_ERR(entry)) {
 				err = PTR_ERR(entry);
@@ -553,7 +553,7 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 		return PTR_ERR(node_folio);
 
 	offset = ofs_of_node(&node_folio->page);
-	ino = ino_of_node(&node_folio->page);
+	ino = ino_of_node(node_folio);
 	f2fs_folio_put(node_folio, true);
 
 	if (ino != dn->inode->i_ino) {
@@ -668,7 +668,7 @@ 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(&folio->page));
+	f2fs_bug_on(sbi, ni.ino != ino_of_node(folio));
 
 	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",
@@ -801,7 +801,7 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 			break;
 		}
 
-		entry = get_fsync_inode(inode_list, ino_of_node(&folio->page));
+		entry = get_fsync_inode(inode_list, ino_of_node(folio));
 		if (!entry)
 			goto next;
 		/*
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 11/60] f2fs: Pass a folio to nid_of_node()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (9 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 10/60] f2fs: Pass a folio to ino_of_node() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-09 19:56   ` Jaegeuk Kim via Linux-f2fs-devel
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 12/60] f2fs: Pass a folio to is_recoverable_dnode() Matthew Wilcox (Oracle)
                   ` (50 subsequent siblings)
  61 siblings, 1 reply; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.  Also make the argument const
as the function does not modify it.

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

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index b023d15b4555..5fc3d985c4e3 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -355,7 +355,7 @@ static void f2fs_write_end_io(struct bio *bio)
 		}
 
 		f2fs_bug_on(sbi, is_node_folio(folio) &&
-				folio->index != nid_of_node(&folio->page));
+				folio->index != nid_of_node(folio));
 
 		dec_page_count(sbi, type);
 		if (f2fs_in_warm_node_list(sbi, folio))
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index eedc56a3561b..db4ccde3737a 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -280,10 +280,10 @@ static bool sanity_check_inode(struct inode *inode, struct folio *node_folio)
 		return false;
 	}
 
-	if (ino_of_node(node_folio) != nid_of_node(&node_folio->page)) {
+	if (ino_of_node(node_folio) != nid_of_node(node_folio)) {
 		f2fs_warn(sbi, "%s: corrupted inode footer i_ino=%lx, ino,nid: [%u, %u] run fsck to fix.",
 			  __func__, inode->i_ino,
-			  ino_of_node(node_folio), nid_of_node(&node_folio->page));
+			  ino_of_node(node_folio), nid_of_node(node_folio));
 		return false;
 	}
 
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index fabcb3fa47cd..26d3bc7597d9 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1477,14 +1477,14 @@ static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
 {
 	struct page *page = &folio->page;
 
-	if (unlikely(nid != nid_of_node(page) ||
+	if (unlikely(nid != nid_of_node(folio) ||
 		(ntype == NODE_TYPE_INODE && !IS_INODE(page)) ||
 		(ntype == NODE_TYPE_XATTR &&
 		!f2fs_has_xattr_block(ofs_of_node(page))) ||
 		time_to_inject(sbi, FAULT_INCONSISTENT_FOOTER))) {
 		f2fs_warn(sbi, "inconsistent node block, node_type:%d, nid:%lu, "
 			  "node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]",
-			  ntype, nid, nid_of_node(page), ino_of_node(folio),
+			  ntype, nid, nid_of_node(folio), ino_of_node(folio),
 			  ofs_of_node(page), cpver_of_node(page),
 			  next_blkaddr_of_node(folio));
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
@@ -1706,7 +1706,7 @@ static bool __write_node_folio(struct folio *folio, bool atomic, bool *submitted
 		goto redirty_out;
 
 	/* get old block addr of this node page */
-	nid = nid_of_node(&folio->page);
+	nid = nid_of_node(folio);
 	f2fs_bug_on(sbi, folio->index != nid);
 
 	if (f2fs_get_node_info(sbi, nid, &ni, !do_balance))
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 6c4fc3449a68..c03cc1fdd136 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -249,9 +249,9 @@ static inline nid_t ino_of_node(const struct folio *node_folio)
 	return le32_to_cpu(rn->footer.ino);
 }
 
-static inline nid_t nid_of_node(struct page *node_page)
+static inline nid_t nid_of_node(const 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.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] 65+ messages in thread

* [f2fs-dev] [PATCH 12/60] f2fs: Pass a folio to is_recoverable_dnode()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (10 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 11/60] f2fs: Pass a folio to nid_of_node() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 13/60] f2fs: Pass a folio to set_dentry_mark() Matthew Wilcox (Oracle)
                   ` (49 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.  Also make the argument const
as the function does not modify it.  Removes a call to compound_head().

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

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 5e443b2ce8db..ae66c40c4b7d 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2018,7 +2018,7 @@ static inline struct f2fs_sb_info *F2FS_M_SB(struct address_space *mapping)
 	return F2FS_I_SB(mapping->host);
 }
 
-static inline struct f2fs_sb_info *F2FS_F_SB(struct folio *folio)
+static inline struct f2fs_sb_info *F2FS_F_SB(const struct folio *folio)
 {
 	return F2FS_M_SB(folio->mapping);
 }
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index c03cc1fdd136..75e03f994847 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -262,7 +262,7 @@ static inline unsigned int ofs_of_node(const struct page *node_page)
 	return flag >> OFFSET_BIT_SHIFT;
 }
 
-static inline __u64 cpver_of_node(struct page *node_page)
+static inline __u64 cpver_of_node(const struct page *node_page)
 {
 	struct f2fs_node *rn = F2FS_NODE(node_page);
 	return le64_to_cpu(rn->footer.cp_ver);
@@ -313,19 +313,19 @@ static inline void fill_node_footer_blkaddr(struct page *page, block_t blkaddr)
 	rn->footer.next_blkaddr = cpu_to_le32(blkaddr);
 }
 
-static inline bool is_recoverable_dnode(struct page *page)
+static inline bool is_recoverable_dnode(const struct folio *folio)
 {
-	struct f2fs_checkpoint *ckpt = F2FS_CKPT(F2FS_P_SB(page));
+	struct f2fs_checkpoint *ckpt = F2FS_CKPT(F2FS_F_SB(folio));
 	__u64 cp_ver = cur_cp_version(ckpt);
 
 	/* Don't care crc part, if fsck.f2fs sets it. */
 	if (__is_set_ckpt_flags(ckpt, CP_NOCRC_RECOVERY_FLAG))
-		return (cp_ver << 32) == (cpver_of_node(page) << 32);
+		return (cp_ver << 32) == (cpver_of_node(&folio->page) << 32);
 
 	if (__is_set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG))
 		cp_ver |= (cur_cp_crc(ckpt) << 32);
 
-	return cp_ver == cpver_of_node(page);
+	return cp_ver == cpver_of_node(&folio->page);
 }
 
 /*
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 224754186096..380055000083 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -375,7 +375,7 @@ static int sanity_check_node_chain(struct f2fs_sb_info *sbi, block_t blkaddr,
 		if (IS_ERR(folio))
 			return PTR_ERR(folio);
 
-		if (!is_recoverable_dnode(&folio->page)) {
+		if (!is_recoverable_dnode(folio)) {
 			f2fs_folio_put(folio, true);
 			*is_detecting = false;
 			return 0;
@@ -424,7 +424,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 			break;
 		}
 
-		if (!is_recoverable_dnode(&folio->page)) {
+		if (!is_recoverable_dnode(folio)) {
 			f2fs_folio_put(folio, true);
 			break;
 		}
@@ -796,7 +796,7 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
 			break;
 		}
 
-		if (!is_recoverable_dnode(&folio->page)) {
+		if (!is_recoverable_dnode(folio)) {
 			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] 65+ messages in thread

* [f2fs-dev] [PATCH 13/60] f2fs: Pass a folio to set_dentry_mark()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (11 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 12/60] f2fs: Pass a folio to is_recoverable_dnode() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 14/60] f2fs: Pass a folio to set_fsync_mark() Matthew Wilcox (Oracle)
                   ` (48 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.

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

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 26d3bc7597d9..f964b526b73c 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1863,7 +1863,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 			f2fs_folio_wait_writeback(folio, NODE, true, true);
 
 			set_fsync_mark(&folio->page, 0);
-			set_dentry_mark(&folio->page, 0);
+			set_dentry_mark(folio, 0);
 
 			if (!atomic || folio == last_folio) {
 				set_fsync_mark(&folio->page, 1);
@@ -1872,7 +1872,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 					if (is_inode_flag_set(inode,
 								FI_DIRTY_INODE))
 						f2fs_update_inode(inode, folio);
-					set_dentry_mark(&folio->page,
+					set_dentry_mark(folio,
 						f2fs_need_dentry_mark(sbi, ino));
 				}
 				/* may be written by other thread */
@@ -2087,7 +2087,7 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 				goto continue_unlock;
 
 			set_fsync_mark(&folio->page, 0);
-			set_dentry_mark(&folio->page, 0);
+			set_dentry_mark(folio, 0);
 
 			if (!__write_node_folio(folio, false, &submitted,
 					wbc, do_balance, io_type, NULL)) {
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 75e03f994847..69384832f84b 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -432,5 +432,5 @@ static inline void set_mark(struct page *page, int mark, int type)
 	f2fs_inode_chksum_set(F2FS_P_SB(page), page);
 #endif
 }
-#define set_dentry_mark(page, mark)	set_mark(page, mark, DENT_BIT_SHIFT)
+#define set_dentry_mark(folio, mark)	set_mark(&folio->page, mark, DENT_BIT_SHIFT)
 #define set_fsync_mark(page, mark)	set_mark(page, mark, FSYNC_BIT_SHIFT)
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 14/60] f2fs: Pass a folio to set_fsync_mark()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (12 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 13/60] f2fs: Pass a folio to set_dentry_mark() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 15/60] f2fs: Pass a folio to set_mark() Matthew Wilcox (Oracle)
                   ` (47 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.

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

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index f964b526b73c..db41d41f03db 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1862,11 +1862,11 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 
 			f2fs_folio_wait_writeback(folio, NODE, true, true);
 
-			set_fsync_mark(&folio->page, 0);
+			set_fsync_mark(folio, 0);
 			set_dentry_mark(folio, 0);
 
 			if (!atomic || folio == last_folio) {
-				set_fsync_mark(&folio->page, 1);
+				set_fsync_mark(folio, 1);
 				percpu_counter_inc(&sbi->rf_node_block_count);
 				if (IS_INODE(&folio->page)) {
 					if (is_inode_flag_set(inode,
@@ -2086,7 +2086,7 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 			if (!folio_clear_dirty_for_io(folio))
 				goto continue_unlock;
 
-			set_fsync_mark(&folio->page, 0);
+			set_fsync_mark(folio, 0);
 			set_dentry_mark(folio, 0);
 
 			if (!__write_node_folio(folio, false, &submitted,
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 69384832f84b..7e7578a547ad 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -433,4 +433,4 @@ static inline void set_mark(struct page *page, int mark, int type)
 #endif
 }
 #define set_dentry_mark(folio, mark)	set_mark(&folio->page, mark, DENT_BIT_SHIFT)
-#define set_fsync_mark(page, mark)	set_mark(page, mark, FSYNC_BIT_SHIFT)
+#define set_fsync_mark(folio, mark)	set_mark(&folio->page, mark, FSYNC_BIT_SHIFT)
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 15/60] f2fs: Pass a folio to set_mark()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (13 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 14/60] f2fs: Pass a folio to set_fsync_mark() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 16/60] f2fs: Pass a folio to f2fs_allocate_data_block() Matthew Wilcox (Oracle)
                   ` (46 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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 a call to
compound_head().

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

diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 7e7578a547ad..8d7d7405de9b 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -418,9 +418,9 @@ static inline void set_cold_node(struct page *page, bool is_dir)
 	rn->footer.flag = cpu_to_le32(flag);
 }
 
-static inline void set_mark(struct page *page, int mark, int type)
+static inline void set_mark(struct folio *folio, int mark, int type)
 {
-	struct f2fs_node *rn = F2FS_NODE(page);
+	struct f2fs_node *rn = F2FS_NODE(&folio->page);
 	unsigned int flag = le32_to_cpu(rn->footer.flag);
 	if (mark)
 		flag |= BIT(type);
@@ -429,8 +429,8 @@ static inline void set_mark(struct page *page, int mark, int type)
 	rn->footer.flag = cpu_to_le32(flag);
 
 #ifdef CONFIG_F2FS_CHECK_FS
-	f2fs_inode_chksum_set(F2FS_P_SB(page), page);
+	f2fs_inode_chksum_set(F2FS_F_SB(folio), &folio->page);
 #endif
 }
-#define set_dentry_mark(folio, mark)	set_mark(&folio->page, mark, DENT_BIT_SHIFT)
-#define set_fsync_mark(folio, mark)	set_mark(&folio->page, mark, FSYNC_BIT_SHIFT)
+#define set_dentry_mark(folio, mark)	set_mark(folio, mark, DENT_BIT_SHIFT)
+#define set_fsync_mark(folio, mark)	set_mark(folio, mark, FSYNC_BIT_SHIFT)
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 16/60] f2fs: Pass a folio to f2fs_allocate_data_block()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (14 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 15/60] f2fs: Pass a folio to set_mark() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 17/60] f2fs: Pass a folio to f2fs_inode_chksum_set() Matthew Wilcox (Oracle)
                   ` (45 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Most callers pass NULL, and the one which passes a page already has a
folio, so we can pass it in.

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

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index ae66c40c4b7d..7488ebc7b390 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3858,7 +3858,7 @@ void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
 			bool recover_newaddr);
 enum temp_type f2fs_get_segment_temp(struct f2fs_sb_info *sbi,
 						enum log_type seg_type);
-int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
+int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct folio *folio,
 			block_t old_blkaddr, block_t *new_blkaddr,
 			struct f2fs_summary *sum, int type,
 			struct f2fs_io_info *fio);
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 5653716460ea..91f32c113da4 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -3747,7 +3747,7 @@ static void f2fs_randomize_chunk(struct f2fs_sb_info *sbi,
 		get_random_u32_inclusive(1, sbi->max_fragment_hole);
 }
 
-int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
+int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct folio *folio,
 		block_t old_blkaddr, block_t *new_blkaddr,
 		struct f2fs_summary *sum, int type,
 		struct f2fs_io_info *fio)
@@ -3851,10 +3851,10 @@ int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
 
 	up_write(&sit_i->sentry_lock);
 
-	if (page && IS_NODESEG(curseg->seg_type)) {
-		fill_node_footer_blkaddr(page, NEXT_FREE_BLKADDR(sbi, curseg));
+	if (folio && IS_NODESEG(curseg->seg_type)) {
+		fill_node_footer_blkaddr(&folio->page, NEXT_FREE_BLKADDR(sbi, curseg));
 
-		f2fs_inode_chksum_set(sbi, page);
+		f2fs_inode_chksum_set(sbi, &folio->page);
 	}
 
 	if (fio) {
@@ -3941,7 +3941,7 @@ static void do_write_page(struct f2fs_summary *sum, struct f2fs_io_info *fio)
 	if (keep_order)
 		f2fs_down_read(&fio->sbi->io_order_lock);
 
-	if (f2fs_allocate_data_block(fio->sbi, fio->page, fio->old_blkaddr,
+	if (f2fs_allocate_data_block(fio->sbi, folio, fio->old_blkaddr,
 			&fio->new_blkaddr, sum, type, fio)) {
 		if (fscrypt_inode_uses_fs_layer_crypto(folio->mapping->host))
 			fscrypt_finalize_bounce_page(&fio->encrypted_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] 65+ messages in thread

* [f2fs-dev] [PATCH 17/60] f2fs: Pass a folio to f2fs_inode_chksum_set()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (15 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 16/60] f2fs: Pass a folio to f2fs_allocate_data_block() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 18/60] f2fs: Pass a folio to f2fs_enable_inode_chksum() Matthew Wilcox (Oracle)
                   ` (44 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.

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

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 7488ebc7b390..49312008fedb 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3634,7 +3634,7 @@ int f2fs_pin_file_control(struct inode *inode, bool inc);
  */
 void f2fs_set_inode_flags(struct inode *inode);
 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);
+void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct folio *folio);
 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);
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index db4ccde3737a..0a071ce586fa 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -184,14 +184,14 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct folio *folio)
 	return provided == calculated;
 }
 
-void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct page *page)
+void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct folio *folio)
 {
-	struct f2fs_inode *ri = &F2FS_NODE(page)->i;
+	struct f2fs_inode *ri = &F2FS_NODE(&folio->page)->i;
 
-	if (!f2fs_enable_inode_chksum(sbi, page))
+	if (!f2fs_enable_inode_chksum(sbi, &folio->page))
 		return;
 
-	ri->i_inode_checksum = cpu_to_le32(f2fs_inode_chksum(sbi, page));
+	ri->i_inode_checksum = cpu_to_le32(f2fs_inode_chksum(sbi, &folio->page));
 }
 
 static bool sanity_check_compress_inode(struct inode *inode,
@@ -752,7 +752,7 @@ void f2fs_update_inode(struct inode *inode, struct folio *node_folio)
 
 	init_idisk_time(inode);
 #ifdef CONFIG_F2FS_CHECK_FS
-	f2fs_inode_chksum_set(F2FS_I_SB(inode), &node_folio->page);
+	f2fs_inode_chksum_set(F2FS_I_SB(inode), node_folio);
 #endif
 }
 
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index db41d41f03db..50c08e89f063 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2215,7 +2215,7 @@ static bool f2fs_dirty_node_folio(struct address_space *mapping,
 		folio_mark_uptodate(folio);
 #ifdef CONFIG_F2FS_CHECK_FS
 	if (IS_INODE(&folio->page))
-		f2fs_inode_chksum_set(F2FS_M_SB(mapping), &folio->page);
+		f2fs_inode_chksum_set(F2FS_M_SB(mapping), folio);
 #endif
 	if (filemap_dirty_folio(mapping, folio)) {
 		inc_page_count(F2FS_M_SB(mapping), F2FS_DIRTY_NODES);
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 8d7d7405de9b..914399113f21 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -429,7 +429,7 @@ static inline void set_mark(struct folio *folio, int mark, int type)
 	rn->footer.flag = cpu_to_le32(flag);
 
 #ifdef CONFIG_F2FS_CHECK_FS
-	f2fs_inode_chksum_set(F2FS_F_SB(folio), &folio->page);
+	f2fs_inode_chksum_set(F2FS_F_SB(folio), folio);
 #endif
 }
 #define set_dentry_mark(folio, mark)	set_mark(folio, mark, DENT_BIT_SHIFT)
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 91f32c113da4..28fb844b7921 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -3854,7 +3854,7 @@ int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct folio *folio,
 	if (folio && IS_NODESEG(curseg->seg_type)) {
 		fill_node_footer_blkaddr(&folio->page, NEXT_FREE_BLKADDR(sbi, curseg));
 
-		f2fs_inode_chksum_set(sbi, &folio->page);
+		f2fs_inode_chksum_set(sbi, folio);
 	}
 
 	if (fio) {
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 18/60] f2fs: Pass a folio to f2fs_enable_inode_chksum()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (16 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 17/60] f2fs: Pass a folio to f2fs_inode_chksum_set() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 19/60] f2fs: Pass a folio to f2fs_inode_chksum() Matthew Wilcox (Oracle)
                   ` (43 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.

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

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 0a071ce586fa..bee6b0970e7b 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -116,14 +116,15 @@ static void __recover_inline_status(struct inode *inode, struct folio *ifolio)
 	return;
 }
 
-static bool f2fs_enable_inode_chksum(struct f2fs_sb_info *sbi, struct page *page)
+static
+bool f2fs_enable_inode_chksum(struct f2fs_sb_info *sbi, struct folio *folio)
 {
-	struct f2fs_inode *ri = &F2FS_NODE(page)->i;
+	struct f2fs_inode *ri = &F2FS_NODE(&folio->page)->i;
 
 	if (!f2fs_sb_has_inode_chksum(sbi))
 		return false;
 
-	if (!IS_INODE(page) || !(ri->i_inline & F2FS_EXTRA_ATTR))
+	if (!IS_INODE(&folio->page) || !(ri->i_inline & F2FS_EXTRA_ATTR))
 		return false;
 
 	if (!F2FS_FITS_IN_INODE(ri, le16_to_cpu(ri->i_extra_isize),
@@ -164,9 +165,9 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct folio *folio)
 		return true;
 
 #ifdef CONFIG_F2FS_CHECK_FS
-	if (!f2fs_enable_inode_chksum(sbi, &folio->page))
+	if (!f2fs_enable_inode_chksum(sbi, folio))
 #else
-	if (!f2fs_enable_inode_chksum(sbi, &folio->page) ||
+	if (!f2fs_enable_inode_chksum(sbi, folio) ||
 			folio_test_dirty(folio) ||
 			folio_test_writeback(folio))
 #endif
@@ -188,7 +189,7 @@ void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct folio *folio)
 {
 	struct f2fs_inode *ri = &F2FS_NODE(&folio->page)->i;
 
-	if (!f2fs_enable_inode_chksum(sbi, &folio->page))
+	if (!f2fs_enable_inode_chksum(sbi, folio))
 		return;
 
 	ri->i_inode_checksum = cpu_to_le32(f2fs_inode_chksum(sbi, &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] 65+ messages in thread

* [f2fs-dev] [PATCH 19/60] f2fs: Pass a folio to f2fs_inode_chksum()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (17 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 18/60] f2fs: Pass a folio to f2fs_enable_inode_chksum() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 20/60] f2fs: Pass a folio to fill_node_footer_blkaddr() Matthew Wilcox (Oracle)
                   ` (42 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/inode.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index bee6b0970e7b..61fd96f0a1ff 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -134,9 +134,9 @@ bool f2fs_enable_inode_chksum(struct f2fs_sb_info *sbi, struct folio *folio)
 	return true;
 }
 
-static __u32 f2fs_inode_chksum(struct f2fs_sb_info *sbi, struct page *page)
+static __u32 f2fs_inode_chksum(struct f2fs_sb_info *sbi, struct folio *folio)
 {
-	struct f2fs_node *node = F2FS_NODE(page);
+	struct f2fs_node *node = F2FS_NODE(&folio->page);
 	struct f2fs_inode *ri = &node->i;
 	__le32 ino = node->footer.ino;
 	__le32 gen = ri->i_generation;
@@ -175,7 +175,7 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct folio *folio)
 
 	ri = &F2FS_NODE(&folio->page)->i;
 	provided = le32_to_cpu(ri->i_inode_checksum);
-	calculated = f2fs_inode_chksum(sbi, &folio->page);
+	calculated = f2fs_inode_chksum(sbi, folio);
 
 	if (provided != calculated)
 		f2fs_warn(sbi, "checksum invalid, nid = %lu, ino_of_node = %x, %x vs. %x",
@@ -192,7 +192,7 @@ void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct folio *folio)
 	if (!f2fs_enable_inode_chksum(sbi, folio))
 		return;
 
-	ri->i_inode_checksum = cpu_to_le32(f2fs_inode_chksum(sbi, &folio->page));
+	ri->i_inode_checksum = cpu_to_le32(f2fs_inode_chksum(sbi, folio));
 }
 
 static bool sanity_check_compress_inode(struct 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] 65+ messages in thread

* [f2fs-dev] [PATCH 20/60] f2fs: Pass a folio to fill_node_footer_blkaddr()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (18 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 19/60] f2fs: Pass a folio to f2fs_inode_chksum() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 21/60] f2fs: Pass a folio to get_nid() Matthew Wilcox (Oracle)
                   ` (41 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/node.h    | 6 +++---
 fs/f2fs/segment.c | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 914399113f21..5cbe038bfaab 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -300,10 +300,10 @@ static inline void copy_node_footer(struct page *dst, struct page *src)
 	memcpy(&dst_rn->footer, &src_rn->footer, sizeof(struct node_footer));
 }
 
-static inline void fill_node_footer_blkaddr(struct page *page, block_t blkaddr)
+static inline void fill_node_footer_blkaddr(struct folio *folio, block_t blkaddr)
 {
-	struct f2fs_checkpoint *ckpt = F2FS_CKPT(F2FS_P_SB(page));
-	struct f2fs_node *rn = F2FS_NODE(page);
+	struct f2fs_checkpoint *ckpt = F2FS_CKPT(F2FS_F_SB(folio));
+	struct f2fs_node *rn = F2FS_NODE(&folio->page);
 	__u64 cp_ver = cur_cp_version(ckpt);
 
 	if (__is_set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG))
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 28fb844b7921..d0ce8b298d3b 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -3852,7 +3852,7 @@ int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct folio *folio,
 	up_write(&sit_i->sentry_lock);
 
 	if (folio && IS_NODESEG(curseg->seg_type)) {
-		fill_node_footer_blkaddr(&folio->page, NEXT_FREE_BLKADDR(sbi, curseg));
+		fill_node_footer_blkaddr(folio, NEXT_FREE_BLKADDR(sbi, curseg));
 
 		f2fs_inode_chksum_set(sbi, 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] 65+ messages in thread

* [f2fs-dev] [PATCH 21/60] f2fs: Pass a folio to get_nid()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (19 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 20/60] f2fs: Pass a folio to fill_node_footer_blkaddr() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 22/60] f2fs: Pass a folio to set_cold_node() Matthew Wilcox (Oracle)
                   ` (40 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.  Also mark it as const to help
the compiler.

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

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 50c08e89f063..c733cf6daa2f 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -649,7 +649,7 @@ static void f2fs_ra_node_pages(struct folio *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->page, i, false);
+		nid = get_nid(parent, i, false);
 		f2fs_ra_node_page(sbi, nid);
 	}
 
@@ -808,7 +808,7 @@ 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);
+		nids[1] = get_nid(parent, offset[0], true);
 	dn->inode_folio = nfolio[0];
 	dn->inode_folio_locked = true;
 
@@ -859,7 +859,7 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 		}
 		if (i < level) {
 			parent = nfolio[i];
-			nids[i + 1] = get_nid(&parent->page, offset[i], false);
+			nids[i + 1] = get_nid(parent, offset[i], false);
 		}
 	}
 	dn->nid = nids[level];
@@ -1083,7 +1083,7 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
 	int i;
 	int idx = depth - 2;
 
-	nid[0] = get_nid(&dn->inode_folio->page, offset[0], true);
+	nid[0] = get_nid(dn->inode_folio, offset[0], true);
 	if (!nid[0])
 		return 0;
 
@@ -1096,14 +1096,14 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
 			idx = i - 1;
 			goto fail;
 		}
-		nid[i + 1] = get_nid(&folios[i]->page, offset[i + 1], false);
+		nid[i + 1] = get_nid(folios[i], offset[i + 1], false);
 	}
 
 	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++) {
-		child_nid = get_nid(&folios[idx]->page, i, false);
+		child_nid = get_nid(folios[idx], i, false);
 		if (!child_nid)
 			continue;
 		dn->nid = child_nid;
@@ -1201,7 +1201,7 @@ int f2fs_truncate_inode_blocks(struct inode *inode, pgoff_t from)
 
 skip_partial:
 	while (cont) {
-		dn.nid = get_nid(&folio->page, offset[0], true);
+		dn.nid = get_nid(folio, offset[0], true);
 		switch (offset[0]) {
 		case NODE_DIR1_BLOCK:
 		case NODE_DIR2_BLOCK:
@@ -1233,7 +1233,7 @@ int f2fs_truncate_inode_blocks(struct inode *inode, pgoff_t from)
 		}
 		if (err < 0)
 			goto fail;
-		if (offset[1] == 0 && get_nid(&folio->page, offset[0], true)) {
+		if (offset[1] == 0 && get_nid(folio, offset[0], true)) {
 			folio_lock(folio);
 			BUG_ON(!is_node_folio(folio));
 			set_nid(folio, offset[0], 0, true);
@@ -1566,7 +1566,7 @@ struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid)
 static struct folio *f2fs_get_node_folio_ra(struct folio *parent, int start)
 {
 	struct f2fs_sb_info *sbi = F2FS_F_SB(parent);
-	nid_t nid = get_nid(&parent->page, start, false);
+	nid_t nid = get_nid(parent, start, false);
 
 	return __get_node_folio(sbi, nid, parent, start, NODE_TYPE_REGULAR);
 }
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 5cbe038bfaab..bf6d6fab0c78 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -380,9 +380,9 @@ static inline int set_nid(struct folio *folio, int off, nid_t nid, bool i)
 	return folio_mark_dirty(folio);
 }
 
-static inline nid_t get_nid(struct page *p, int off, bool i)
+static inline nid_t get_nid(const struct folio *folio, int off, bool i)
 {
-	struct f2fs_node *rn = F2FS_NODE(p);
+	struct f2fs_node *rn = F2FS_NODE(&folio->page);
 
 	if (i)
 		return le32_to_cpu(rn->i.i_nid[off - NODE_DIR1_BLOCK]);
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 22/60] f2fs: Pass a folio to set_cold_node()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (20 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 21/60] f2fs: Pass a folio to get_nid() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 23/60] f2fs: Pass folios to copy_node_footer() Matthew Wilcox (Oracle)
                   ` (39 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.  Also mark it as const to help
the compiler.

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

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 61fd96f0a1ff..9b71e3e4f635 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -484,7 +484,7 @@ static int do_read_inode(struct inode *inode)
 	/* try to recover cold bit for non-dir inode */
 	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);
+		set_cold_node(node_folio, false);
 		folio_mark_dirty(node_folio);
 	}
 
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index c733cf6daa2f..15a024581014 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1381,7 +1381,7 @@ struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs)
 
 	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));
+	set_cold_node(folio, S_ISDIR(dn->inode->i_mode));
 	if (!folio_test_uptodate(folio))
 		folio_mark_uptodate(folio);
 	if (folio_mark_dirty(folio))
@@ -2828,7 +2828,7 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct folio *folio)
 	if (!folio_test_uptodate(ifolio))
 		folio_mark_uptodate(ifolio);
 	fill_node_footer(&ifolio->page, ino, ino, 0, true);
-	set_cold_node(&ifolio->page, false);
+	set_cold_node(ifolio, false);
 
 	src = F2FS_INODE(folio);
 	dst = F2FS_INODE(ifolio);
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index bf6d6fab0c78..d1c15fc0ddd8 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -406,9 +406,9 @@ static inline int is_node(const struct page *page, int type)
 #define is_fsync_dnode(page)	is_node(page, FSYNC_BIT_SHIFT)
 #define is_dent_dnode(page)	is_node(page, DENT_BIT_SHIFT)
 
-static inline void set_cold_node(struct page *page, bool is_dir)
+static inline void set_cold_node(const struct folio *folio, bool is_dir)
 {
-	struct f2fs_node *rn = F2FS_NODE(page);
+	struct f2fs_node *rn = F2FS_NODE(&folio->page);
 	unsigned int flag = le32_to_cpu(rn->footer.flag);
 
 	if (is_dir)
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 23/60] f2fs: Pass folios to copy_node_footer()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (21 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 22/60] f2fs: Pass a folio to set_cold_node() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 24/60] f2fs: Pass a folio to fill_node_footer() Matthew Wilcox (Oracle)
                   ` (38 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller has folios so pass them in.  Also mark them as const to help
the compiler.

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

diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index d1c15fc0ddd8..0fd4a09d6e2f 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -293,10 +293,11 @@ static inline void fill_node_footer(struct page *page, nid_t nid,
 					(old_flag & OFFSET_BIT_MASK));
 }
 
-static inline void copy_node_footer(struct page *dst, struct page *src)
+static inline void copy_node_footer(const struct folio *dst,
+		const struct folio *src)
 {
-	struct f2fs_node *src_rn = F2FS_NODE(src);
-	struct f2fs_node *dst_rn = F2FS_NODE(dst);
+	struct f2fs_node *src_rn = F2FS_NODE(&src->page);
+	struct f2fs_node *dst_rn = F2FS_NODE(&dst->page);
 	memcpy(&dst_rn->footer, &src_rn->footer, sizeof(struct node_footer));
 }
 
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 380055000083..185632ef790f 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -758,7 +758,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 		}
 	}
 
-	copy_node_footer(&dn.node_folio->page, &folio->page);
+	copy_node_footer(dn.node_folio, folio);
 	fill_node_footer(&dn.node_folio->page, dn.nid, ni.ino,
 					ofs_of_node(&folio->page), false);
 	folio_mark_dirty(dn.node_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] 65+ messages in thread

* [f2fs-dev] [PATCH 24/60] f2fs: Pass a folio to fill_node_footer()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (22 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 23/60] f2fs: Pass folios to copy_node_footer() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 25/60] f2fs: Pass a folio to cpver_of_node() Matthew Wilcox (Oracle)
                   ` (37 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.  Also mark it as const to help
the compiler.

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

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 15a024581014..9c47f1e73421 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1380,7 +1380,7 @@ struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs)
 	set_node_addr(sbi, &new_ni, NEW_ADDR, false);
 
 	f2fs_folio_wait_writeback(folio, NODE, true, true);
-	fill_node_footer(&folio->page, dn->nid, dn->inode->i_ino, ofs, true);
+	fill_node_footer(folio, dn->nid, dn->inode->i_ino, ofs, true);
 	set_cold_node(folio, S_ISDIR(dn->inode->i_mode));
 	if (!folio_test_uptodate(folio))
 		folio_mark_uptodate(folio);
@@ -2827,7 +2827,7 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct folio *folio)
 
 	if (!folio_test_uptodate(ifolio))
 		folio_mark_uptodate(ifolio);
-	fill_node_footer(&ifolio->page, ino, ino, 0, true);
+	fill_node_footer(ifolio, ino, ino, 0, true);
 	set_cold_node(ifolio, false);
 
 	src = F2FS_INODE(folio);
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 0fd4a09d6e2f..91a037a1815d 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -274,10 +274,10 @@ static inline block_t next_blkaddr_of_node(struct folio *node_folio)
 	return le32_to_cpu(rn->footer.next_blkaddr);
 }
 
-static inline void fill_node_footer(struct page *page, nid_t nid,
+static inline void fill_node_footer(const struct folio *folio, nid_t nid,
 				nid_t ino, unsigned int ofs, bool reset)
 {
-	struct f2fs_node *rn = F2FS_NODE(page);
+	struct f2fs_node *rn = F2FS_NODE(&folio->page);
 	unsigned int old_flag = 0;
 
 	if (reset)
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 185632ef790f..2de28bdfa670 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -759,7 +759,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 	}
 
 	copy_node_footer(dn.node_folio, folio);
-	fill_node_footer(&dn.node_folio->page, dn.nid, ni.ino,
+	fill_node_footer(dn.node_folio, dn.nid, ni.ino,
 					ofs_of_node(&folio->page), false);
 	folio_mark_dirty(dn.node_folio);
 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] 65+ messages in thread

* [f2fs-dev] [PATCH 25/60] f2fs: Pass a folio to cpver_of_node()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (23 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 24/60] f2fs: Pass a folio to fill_node_footer() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 26/60] f2fs: Pass a folio to f2fs_recover_xattr_data() Matthew Wilcox (Oracle)
                   ` (36 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers have a folio so pass it in.

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

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 9c47f1e73421..89a27bbc0226 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1485,7 +1485,7 @@ static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
 		f2fs_warn(sbi, "inconsistent node block, node_type:%d, nid:%lu, "
 			  "node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]",
 			  ntype, nid, nid_of_node(folio), ino_of_node(folio),
-			  ofs_of_node(page), cpver_of_node(page),
+			  ofs_of_node(page), cpver_of_node(folio),
 			  next_blkaddr_of_node(folio));
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_handle_error(sbi, ERROR_INCONSISTENT_FOOTER);
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 91a037a1815d..f8d26d1b9cd0 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -262,9 +262,9 @@ static inline unsigned int ofs_of_node(const struct page *node_page)
 	return flag >> OFFSET_BIT_SHIFT;
 }
 
-static inline __u64 cpver_of_node(const struct page *node_page)
+static inline __u64 cpver_of_node(const struct folio *node_folio)
 {
-	struct f2fs_node *rn = F2FS_NODE(node_page);
+	struct f2fs_node *rn = F2FS_NODE(&node_folio->page);
 	return le64_to_cpu(rn->footer.cp_ver);
 }
 
@@ -321,12 +321,12 @@ static inline bool is_recoverable_dnode(const struct folio *folio)
 
 	/* Don't care crc part, if fsck.f2fs sets it. */
 	if (__is_set_ckpt_flags(ckpt, CP_NOCRC_RECOVERY_FLAG))
-		return (cp_ver << 32) == (cpver_of_node(&folio->page) << 32);
+		return (cp_ver << 32) == (cpver_of_node(folio) << 32);
 
 	if (__is_set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG))
 		cp_ver |= (cur_cp_crc(ckpt) << 32);
 
-	return cp_ver == cpver_of_node(&folio->page);
+	return cp_ver == cpver_of_node(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] 65+ messages in thread

* [f2fs-dev] [PATCH 26/60] f2fs: Pass a folio to f2fs_recover_xattr_data()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (24 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 25/60] f2fs: Pass a folio to cpver_of_node() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 27/60] f2fs: Pass a folio to is_fsync_dnode() Matthew Wilcox (Oracle)
                   ` (35 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

One caller passes NULL and the other caller already 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 49312008fedb..12b14fc406c5 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3790,7 +3790,7 @@ 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 folio *folio);
-int f2fs_recover_xattr_data(struct inode *inode, struct page *page);
+int f2fs_recover_xattr_data(struct inode *inode, struct folio *folio);
 int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct folio *folio);
 int f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
 			unsigned int segno, struct f2fs_summary_block *sum);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 89a27bbc0226..f8620b262b72 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2753,7 +2753,7 @@ int f2fs_recover_inline_xattr(struct inode *inode, struct folio *folio)
 	return 0;
 }
 
-int f2fs_recover_xattr_data(struct inode *inode, struct page *page)
+int f2fs_recover_xattr_data(struct inode *inode, struct folio *folio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	nid_t prev_xnid = F2FS_I(inode)->i_xattr_nid;
@@ -2791,8 +2791,8 @@ int f2fs_recover_xattr_data(struct inode *inode, struct page *page)
 	f2fs_update_inode_page(inode);
 
 	/* 3: update and set xattr node page dirty */
-	if (page) {
-		memcpy(F2FS_NODE(&xfolio->page), F2FS_NODE(page),
+	if (folio) {
+		memcpy(F2FS_NODE(&xfolio->page), F2FS_NODE(&folio->page),
 				VALID_XATTR_BLOCK_SIZE);
 		folio_mark_dirty(xfolio);
 	}
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 2de28bdfa670..01704055b4c2 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -633,7 +633,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 		if (err)
 			goto out;
 	} else if (f2fs_has_xattr_block(ofs_of_node(&folio->page))) {
-		err = f2fs_recover_xattr_data(inode, &folio->page);
+		err = f2fs_recover_xattr_data(inode, folio);
 		if (!err)
 			recovered++;
 		goto 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] 65+ messages in thread

* [f2fs-dev] [PATCH 27/60] f2fs: Pass a folio to is_fsync_dnode()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (25 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 26/60] f2fs: Pass a folio to f2fs_recover_xattr_data() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 28/60] f2fs: Pass a folio to is_dent_dnode() Matthew Wilcox (Oracle)
                   ` (34 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/node.c     | 2 +-
 fs/f2fs/node.h     | 2 +-
 fs/f2fs/recovery.c | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index f8620b262b72..7ea5a98399a7 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1744,7 +1744,7 @@ static bool __write_node_folio(struct folio *folio, 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(&folio->page));
+	set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(folio));
 	dec_page_count(sbi, F2FS_DIRTY_NODES);
 	f2fs_up_read(&sbi->node_write);
 
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index f8d26d1b9cd0..17afa6d51053 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -404,7 +404,7 @@ static inline int is_node(const struct page *page, int type)
 }
 
 #define is_cold_node(page)	is_node(page, COLD_BIT_SHIFT)
-#define is_fsync_dnode(page)	is_node(page, FSYNC_BIT_SHIFT)
+#define is_fsync_dnode(folio)	is_node(&folio->page, FSYNC_BIT_SHIFT)
 #define is_dent_dnode(page)	is_node(page, DENT_BIT_SHIFT)
 
 static inline void set_cold_node(const struct folio *folio, bool is_dir)
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 01704055b4c2..3434be2d7865 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -429,7 +429,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 			break;
 		}
 
-		if (!is_fsync_dnode(&folio->page))
+		if (!is_fsync_dnode(folio))
 			goto next;
 
 		entry = get_fsync_inode(head, ino_of_node(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] 65+ messages in thread

* [f2fs-dev] [PATCH 28/60] f2fs: Pass a folio to is_dent_dnode()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (26 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 27/60] f2fs: Pass a folio to is_fsync_dnode() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 29/60] f2fs: Add fio->folio Matthew Wilcox (Oracle)
                   ` (33 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/node.h     | 2 +-
 fs/f2fs/recovery.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 17afa6d51053..aea801c58097 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -405,7 +405,7 @@ static inline int is_node(const struct page *page, int type)
 
 #define is_cold_node(page)	is_node(page, COLD_BIT_SHIFT)
 #define is_fsync_dnode(folio)	is_node(&folio->page, FSYNC_BIT_SHIFT)
-#define is_dent_dnode(page)	is_node(page, DENT_BIT_SHIFT)
+#define is_dent_dnode(folio)	is_node(&folio->page, DENT_BIT_SHIFT)
 
 static inline void set_cold_node(const struct folio *folio, bool is_dir)
 {
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 3434be2d7865..3bfcf5c297a5 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -438,7 +438,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 
 			if (!check_only &&
 					IS_INODE(&folio->page) &&
-					is_dent_dnode(&folio->page)) {
+					is_dent_dnode(folio)) {
 				err = f2fs_recover_inode_page(sbi, folio);
 				if (err) {
 					f2fs_folio_put(folio, true);
@@ -463,7 +463,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 		}
 		entry->blkaddr = blkaddr;
 
-		if (IS_INODE(&folio->page) && is_dent_dnode(&folio->page))
+		if (IS_INODE(&folio->page) && is_dent_dnode(folio))
 			entry->last_dentry = blkaddr;
 next:
 		/* check next segment */
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 29/60] f2fs: Add fio->folio
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (27 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 28/60] f2fs: Pass a folio to is_dent_dnode() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 30/60] f2fs: Use folio_unlock() in f2fs_write_compressed_pages() Matthew Wilcox (Oracle)
                   ` (32 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Put fio->page insto a union with fio->folio.  This lets us remove a
lot of folio->page and page->folio conversions.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/checkpoint.c |  4 ++--
 fs/f2fs/data.c       | 17 ++++++++---------
 fs/f2fs/f2fs.h       |  7 +++++--
 fs/f2fs/gc.c         |  6 +++---
 fs/f2fs/inline.c     |  2 +-
 fs/f2fs/node.c       |  4 ++--
 fs/f2fs/segment.c    |  7 +++----
 7 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index f149ec28aefd..07ca10c66649 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -82,7 +82,7 @@ static struct folio *__get_meta_folio(struct f2fs_sb_info *sbi, pgoff_t index,
 	if (folio_test_uptodate(folio))
 		goto out;
 
-	fio.page = &folio->page;
+	fio.folio = folio;
 
 	err = f2fs_submit_page_bio(&fio);
 	if (err) {
@@ -309,7 +309,7 @@ int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
 			continue;
 		}
 
-		fio.page = &folio->page;
+		fio.folio = folio;
 		err = f2fs_submit_page_bio(&fio);
 		f2fs_folio_put(folio, err ? true : false);
 
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 5fc3d985c4e3..198a7093d98b 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -419,7 +419,6 @@ int f2fs_target_device_index(struct f2fs_sb_info *sbi, block_t blkaddr)
 static blk_opf_t f2fs_io_flags(struct f2fs_io_info *fio)
 {
 	unsigned int temp_mask = GENMASK(NR_TEMP_TYPE - 1, 0);
-	struct folio *fio_folio = page_folio(fio->page);
 	unsigned int fua_flag, meta_flag, io_flag;
 	blk_opf_t op_flags = 0;
 
@@ -447,7 +446,7 @@ static blk_opf_t f2fs_io_flags(struct f2fs_io_info *fio)
 		op_flags |= REQ_FUA;
 
 	if (fio->type == DATA &&
-	    F2FS_I(fio_folio->mapping->host)->ioprio_hint == F2FS_IOPRIO_WRITE)
+	    F2FS_I(fio->folio->mapping->host)->ioprio_hint == F2FS_IOPRIO_WRITE)
 		op_flags |= REQ_PRIO;
 
 	return op_flags;
@@ -691,7 +690,7 @@ void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi)
 int f2fs_submit_page_bio(struct f2fs_io_info *fio)
 {
 	struct bio *bio;
-	struct folio *fio_folio = page_folio(fio->page);
+	struct folio *fio_folio = fio->folio;
 	struct folio *data_folio = fio->encrypted_page ?
 			page_folio(fio->encrypted_page) : fio_folio;
 
@@ -779,7 +778,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 folio *fio_folio = fio->folio;
 	struct f2fs_sb_info *sbi = fio->sbi;
 	enum temp_type temp;
 	bool found = false;
@@ -888,7 +887,7 @@ int f2fs_merge_page_bio(struct f2fs_io_info *fio)
 	struct bio *bio = *fio->bio;
 	struct page *page = fio->encrypted_page ?
 			fio->encrypted_page : fio->page;
-	struct folio *folio = page_folio(fio->page);
+	struct folio *folio = fio->folio;
 
 	if (!f2fs_is_valid_blkaddr(fio->sbi, fio->new_blkaddr,
 			__is_meta_io(fio) ? META_GENERIC : DATA_GENERIC))
@@ -1012,12 +1011,12 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
 	}
 
 	if (fio->io_wbc)
-		wbc_account_cgroup_owner(fio->io_wbc, page_folio(fio->page),
-					 PAGE_SIZE);
+		wbc_account_cgroup_owner(fio->io_wbc, fio->folio,
+				folio_size(fio->folio));
 
 	io->last_block_in_bio = fio->new_blkaddr;
 
-	trace_f2fs_submit_folio_write(page_folio(fio->page), fio);
+	trace_f2fs_submit_folio_write(fio->folio, fio);
 #ifdef CONFIG_BLK_DEV_ZONED
 	if (f2fs_sb_has_blkzoned(sbi) && btype < META &&
 			is_end_zone_blkaddr(sbi, fio->new_blkaddr)) {
@@ -2642,7 +2641,7 @@ static inline bool need_inplace_update(struct f2fs_io_info *fio)
 
 int f2fs_do_write_data_page(struct f2fs_io_info *fio)
 {
-	struct folio *folio = page_folio(fio->page);
+	struct folio *folio = fio->folio;
 	struct inode *inode = folio->mapping->host;
 	struct dnode_of_data dn;
 	struct node_info ni;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 12b14fc406c5..f98d83ccd1e2 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1240,7 +1240,10 @@ struct f2fs_io_info {
 	blk_opf_t op_flags;	/* req_flag_bits */
 	block_t new_blkaddr;	/* new block address to be written */
 	block_t old_blkaddr;	/* old block address before Cow */
-	struct page *page;	/* page to be written */
+	union {
+		struct page *page;	/* page to be written */
+		struct folio *folio;
+	};
 	struct page *encrypted_page;	/* encrypted page */
 	struct page *compressed_page;	/* compressed page */
 	struct list_head list;		/* serialize IOs */
@@ -3892,7 +3895,7 @@ unsigned long long f2fs_get_section_mtime(struct f2fs_sb_info *sbi,
 
 static inline struct inode *fio_inode(struct f2fs_io_info *fio)
 {
-	return page_folio(fio->page)->mapping->host;
+	return fio->folio->mapping->host;
 }
 
 #define DEF_FRAGMENT_SIZE	4
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index fc262d6dff3d..b2645a18a596 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1249,7 +1249,7 @@ static int ra_data_block(struct inode *inode, pgoff_t index)
 	}
 got_it:
 	/* read folio */
-	fio.page = &folio->page;
+	fio.folio = folio;
 	fio.new_blkaddr = fio.old_blkaddr = dn.data_blkaddr;
 
 	/*
@@ -1353,7 +1353,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 		goto put_out;
 
 	/* read page */
-	fio.page = &folio->page;
+	fio.folio = folio;
 	fio.new_blkaddr = fio.old_blkaddr = dn.data_blkaddr;
 
 	if (lfs_mode)
@@ -1483,7 +1483,7 @@ static int move_data_page(struct inode *inode, block_t bidx, int gc_type,
 			.op = REQ_OP_WRITE,
 			.op_flags = REQ_SYNC,
 			.old_blkaddr = NULL_ADDR,
-			.page = &folio->page,
+			.folio = folio,
 			.encrypted_page = NULL,
 			.need_lock = LOCK_REQ,
 			.io_type = FS_GC_DATA_IO,
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 4c636a8043f8..9851310cdb87 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -150,7 +150,7 @@ int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio)
 		.type = DATA,
 		.op = REQ_OP_WRITE,
 		.op_flags = REQ_SYNC | REQ_PRIO,
-		.page = &folio->page,
+		.folio = folio,
 		.encrypted_page = NULL,
 		.io_type = FS_DATA_IO,
 	};
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 7ea5a98399a7..b55827d687e2 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1413,7 +1413,7 @@ static int read_node_folio(struct folio *folio, blk_opf_t op_flags)
 		.type = NODE,
 		.op = REQ_OP_READ,
 		.op_flags = op_flags,
-		.page = &folio->page,
+		.folio = folio,
 		.encrypted_page = NULL,
 	};
 	int err;
@@ -1677,7 +1677,7 @@ static bool __write_node_folio(struct folio *folio, bool atomic, bool *submitted
 		.type = NODE,
 		.op = REQ_OP_WRITE,
 		.op_flags = wbc_to_write_flags(wbc),
-		.page = &folio->page,
+		.folio = folio,
 		.encrypted_page = NULL,
 		.submitted = 0,
 		.io_type = io_type,
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index d0ce8b298d3b..533b4295e4d6 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -3666,8 +3666,7 @@ static int __get_segment_type_6(struct f2fs_io_info *fio)
 		if (file_is_cold(inode) || f2fs_need_compress_data(inode))
 			return CURSEG_COLD_DATA;
 
-		type = __get_age_segment_type(inode,
-				page_folio(fio->page)->index);
+		type = __get_age_segment_type(inode, fio->folio->index);
 		if (type != NO_CHECK_TYPE)
 			return type;
 
@@ -3932,7 +3931,7 @@ static int log_type_to_seg_type(enum log_type type)
 
 static void do_write_page(struct f2fs_summary *sum, struct f2fs_io_info *fio)
 {
-	struct folio *folio = page_folio(fio->page);
+	struct folio *folio = fio->folio;
 	enum log_type type = __get_segment_type(fio);
 	int seg_type = log_type_to_seg_type(type);
 	bool keep_order = (f2fs_lfs_mode(fio->sbi) &&
@@ -3979,7 +3978,7 @@ void f2fs_do_write_meta_page(struct f2fs_sb_info *sbi, struct folio *folio,
 		.op_flags = REQ_SYNC | REQ_META | REQ_PRIO,
 		.old_blkaddr = folio->index,
 		.new_blkaddr = folio->index,
-		.page = folio_page(folio, 0),
+		.folio = folio,
 		.encrypted_page = NULL,
 		.in_list = 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] 65+ messages in thread

* [f2fs-dev] [PATCH 30/60] f2fs: Use folio_unlock() in f2fs_write_compressed_pages()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (28 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 29/60] f2fs: Add fio->folio Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 31/60] f2fs: Pass a folio to is_cold_node() Matthew Wilcox (Oracle)
                   ` (31 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Remove a call to compound_head() by replacing a call to unlock_page()
with a call to folio_unlock().

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 8cbb8038bc72..5be1a4396f80 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1419,7 +1419,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,
 		(*submitted)++;
 unlock_continue:
 		inode_dec_dirty_pages(cc->inode);
-		unlock_page(fio.page);
+		folio_unlock(fio.folio);
 	}
 
 	if (fio.compr_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] 65+ messages in thread

* [f2fs-dev] [PATCH 31/60] f2fs: Pass a folio to is_cold_node()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (29 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 30/60] f2fs: Use folio_unlock() in f2fs_write_compressed_pages() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 32/60] f2fs: Pass a folio to is_node() Matthew Wilcox (Oracle)
                   ` (30 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/inode.c   |  2 +-
 fs/f2fs/node.c    | 12 ++++++------
 fs/f2fs/node.h    |  2 +-
 fs/f2fs/segment.c |  4 ++--
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 9b71e3e4f635..68510c2d90a9 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -482,7 +482,7 @@ static int do_read_inode(struct inode *inode)
 		__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)) {
+	if (!S_ISDIR(inode->i_mode) && !is_cold_node(node_folio)) {
 		f2fs_folio_wait_writeback(node_folio, NODE, true, true);
 		set_cold_node(node_folio, false);
 		folio_mark_dirty(node_folio);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index b55827d687e2..d406342714f7 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -313,7 +313,7 @@ static unsigned int __gang_lookup_nat_set(struct f2fs_nm_info *nm_i,
 bool f2fs_in_warm_node_list(struct f2fs_sb_info *sbi, struct folio *folio)
 {
 	return is_node_folio(folio) && IS_DNODE(&folio->page) &&
-					is_cold_node(&folio->page);
+					is_cold_node(folio);
 }
 
 void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi)
@@ -1631,7 +1631,7 @@ static struct folio *last_fsync_dnode(struct f2fs_sb_info *sbi, nid_t ino)
 				return ERR_PTR(-EIO);
 			}
 
-			if (!IS_DNODE(&folio->page) || !is_cold_node(&folio->page))
+			if (!IS_DNODE(&folio->page) || !is_cold_node(folio))
 				continue;
 			if (ino_of_node(folio) != ino)
 				continue;
@@ -1702,7 +1702,7 @@ static bool __write_node_folio(struct folio *folio, bool atomic, bool *submitted
 
 	if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) &&
 			wbc->sync_mode == WB_SYNC_NONE &&
-			IS_DNODE(&folio->page) && is_cold_node(&folio->page))
+			IS_DNODE(&folio->page) && is_cold_node(folio))
 		goto redirty_out;
 
 	/* get old block addr of this node page */
@@ -1840,7 +1840,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 				goto out;
 			}
 
-			if (!IS_DNODE(&folio->page) || !is_cold_node(&folio->page))
+			if (!IS_DNODE(&folio->page) || !is_cold_node(folio))
 				continue;
 			if (ino_of_node(folio) != ino)
 				continue;
@@ -2043,10 +2043,10 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 			if (step == 0 && IS_DNODE(&folio->page))
 				continue;
 			if (step == 1 && (!IS_DNODE(&folio->page) ||
-						is_cold_node(&folio->page)))
+						is_cold_node(folio)))
 				continue;
 			if (step == 2 && (!IS_DNODE(&folio->page) ||
-						!is_cold_node(&folio->page)))
+						!is_cold_node(folio)))
 				continue;
 lock_node:
 			if (wbc->sync_mode == WB_SYNC_ALL)
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index aea801c58097..a03e30a1b8c2 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -403,7 +403,7 @@ static inline int is_node(const struct page *page, int type)
 	return le32_to_cpu(rn->footer.flag) & BIT(type);
 }
 
-#define is_cold_node(page)	is_node(page, COLD_BIT_SHIFT)
+#define is_cold_node(folio)	is_node(&folio->page, COLD_BIT_SHIFT)
 #define is_fsync_dnode(folio)	is_node(&folio->page, FSYNC_BIT_SHIFT)
 #define is_dent_dnode(folio)	is_node(&folio->page, DENT_BIT_SHIFT)
 
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 533b4295e4d6..cd49015a905a 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -3620,7 +3620,7 @@ static int __get_segment_type_4(struct f2fs_io_info *fio)
 		else
 			return CURSEG_COLD_DATA;
 	} else {
-		if (IS_DNODE(fio->page) && is_cold_node(fio->page))
+		if (IS_DNODE(fio->page) && is_cold_node(fio->folio))
 			return CURSEG_WARM_NODE;
 		else
 			return CURSEG_COLD_NODE;
@@ -3678,7 +3678,7 @@ static int __get_segment_type_6(struct f2fs_io_info *fio)
 						inode->i_write_hint);
 	} else {
 		if (IS_DNODE(fio->page))
-			return is_cold_node(fio->page) ? CURSEG_WARM_NODE :
+			return is_cold_node(fio->folio) ? CURSEG_WARM_NODE :
 						CURSEG_HOT_NODE;
 		return CURSEG_COLD_NODE;
 	}
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 32/60] f2fs: Pass a folio to is_node()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (30 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 31/60] f2fs: Pass a folio to is_cold_node() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 33/60] f2fs: Pass a folio to IS_DNODE() Matthew Wilcox (Oracle)
                   ` (29 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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.

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

diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index a03e30a1b8c2..657f9a2d4b05 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -397,15 +397,15 @@ static inline nid_t get_nid(const struct folio *folio, int off, bool i)
  *  - Mark cold data pages in page cache
  */
 
-static inline int is_node(const struct page *page, int type)
+static inline int is_node(const struct folio *folio, int type)
 {
-	struct f2fs_node *rn = F2FS_NODE(page);
+	struct f2fs_node *rn = F2FS_NODE(&folio->page);
 	return le32_to_cpu(rn->footer.flag) & BIT(type);
 }
 
-#define is_cold_node(folio)	is_node(&folio->page, COLD_BIT_SHIFT)
-#define is_fsync_dnode(folio)	is_node(&folio->page, FSYNC_BIT_SHIFT)
-#define is_dent_dnode(folio)	is_node(&folio->page, DENT_BIT_SHIFT)
+#define is_cold_node(folio)	is_node(folio, COLD_BIT_SHIFT)
+#define is_fsync_dnode(folio)	is_node(folio, FSYNC_BIT_SHIFT)
+#define is_dent_dnode(folio)	is_node(folio, DENT_BIT_SHIFT)
 
 static inline void set_cold_node(const struct folio *folio, bool is_dir)
 {
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 33/60] f2fs: Pass a folio to IS_DNODE()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (31 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 32/60] f2fs: Pass a folio to is_node() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 34/60] f2fs: Pass a folio to ofs_of_node() Matthew Wilcox (Oracle)
                   ` (28 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/node.c    | 15 +++++++--------
 fs/f2fs/node.h    |  4 ++--
 fs/f2fs/segment.c |  4 ++--
 3 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index d406342714f7..a2258883ca77 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -312,8 +312,7 @@ static unsigned int __gang_lookup_nat_set(struct f2fs_nm_info *nm_i,
 
 bool f2fs_in_warm_node_list(struct f2fs_sb_info *sbi, struct folio *folio)
 {
-	return is_node_folio(folio) && IS_DNODE(&folio->page) &&
-					is_cold_node(folio);
+	return is_node_folio(folio) && IS_DNODE(folio) && is_cold_node(folio);
 }
 
 void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi)
@@ -1631,7 +1630,7 @@ static struct folio *last_fsync_dnode(struct f2fs_sb_info *sbi, nid_t ino)
 				return ERR_PTR(-EIO);
 			}
 
-			if (!IS_DNODE(&folio->page) || !is_cold_node(folio))
+			if (!IS_DNODE(folio) || !is_cold_node(folio))
 				continue;
 			if (ino_of_node(folio) != ino)
 				continue;
@@ -1702,7 +1701,7 @@ static bool __write_node_folio(struct folio *folio, bool atomic, bool *submitted
 
 	if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) &&
 			wbc->sync_mode == WB_SYNC_NONE &&
-			IS_DNODE(&folio->page) && is_cold_node(folio))
+			IS_DNODE(folio) && is_cold_node(folio))
 		goto redirty_out;
 
 	/* get old block addr of this node page */
@@ -1840,7 +1839,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 				goto out;
 			}
 
-			if (!IS_DNODE(&folio->page) || !is_cold_node(folio))
+			if (!IS_DNODE(folio) || !is_cold_node(folio))
 				continue;
 			if (ino_of_node(folio) != ino)
 				continue;
@@ -2040,12 +2039,12 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 			 * 1. dentry dnodes
 			 * 2. file dnodes
 			 */
-			if (step == 0 && IS_DNODE(&folio->page))
+			if (step == 0 && IS_DNODE(folio))
 				continue;
-			if (step == 1 && (!IS_DNODE(&folio->page) ||
+			if (step == 1 && (!IS_DNODE(folio) ||
 						is_cold_node(folio)))
 				continue;
-			if (step == 2 && (!IS_DNODE(&folio->page) ||
+			if (step == 2 && (!IS_DNODE(folio) ||
 						!is_cold_node(folio)))
 				continue;
 lock_node:
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 657f9a2d4b05..d366e2e25498 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -350,9 +350,9 @@ static inline bool is_recoverable_dnode(const struct folio *folio)
  *                 `- indirect node ((6 + 2N) + (N - 1)(N + 1))
  *                       `- direct node
  */
-static inline bool IS_DNODE(const struct page *node_page)
+static inline bool IS_DNODE(const struct folio *node_folio)
 {
-	unsigned int ofs = ofs_of_node(node_page);
+	unsigned int ofs = ofs_of_node(&node_folio->page);
 
 	if (f2fs_has_xattr_block(ofs))
 		return true;
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index cd49015a905a..9bc9bdddc3e0 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -3620,7 +3620,7 @@ static int __get_segment_type_4(struct f2fs_io_info *fio)
 		else
 			return CURSEG_COLD_DATA;
 	} else {
-		if (IS_DNODE(fio->page) && is_cold_node(fio->folio))
+		if (IS_DNODE(fio->folio) && is_cold_node(fio->folio))
 			return CURSEG_WARM_NODE;
 		else
 			return CURSEG_COLD_NODE;
@@ -3677,7 +3677,7 @@ static int __get_segment_type_6(struct f2fs_io_info *fio)
 		return f2fs_rw_hint_to_seg_type(F2FS_I_SB(inode),
 						inode->i_write_hint);
 	} else {
-		if (IS_DNODE(fio->page))
+		if (IS_DNODE(fio->folio))
 			return is_cold_node(fio->folio) ? CURSEG_WARM_NODE :
 						CURSEG_HOT_NODE;
 		return CURSEG_COLD_NODE;
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 34/60] f2fs: Pass a folio to ofs_of_node()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (32 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 33/60] f2fs: Pass a folio to IS_DNODE() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 35/60] f2fs: Pass a folio to get_dnode_base() Matthew Wilcox (Oracle)
                   ` (27 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/extent_cache.c |  2 +-
 fs/f2fs/file.c         |  2 +-
 fs/f2fs/gc.c           |  2 +-
 fs/f2fs/node.c         |  4 ++--
 fs/f2fs/node.h         |  6 +++---
 fs/f2fs/recovery.c     | 14 +++++++-------
 6 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index a5d5bc8c0da5..941e85fe091e 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_folio->page), dn->inode) +
+	ei.fofs = f2fs_start_bidx_of_node(ofs_of_node(dn->node_folio), dn->inode) +
 								dn->ofs_in_node;
 	ei.len = 1;
 
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index ded2f48df351..b37a1aae2708 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -708,7 +708,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_folio->page),
+		fofs = f2fs_start_bidx_of_node(ofs_of_node(dn->node_folio),
 							dn->inode) + ofs;
 		f2fs_update_read_extent_cache_range(dn, fofs, 0, len);
 		f2fs_update_age_extent_cache_range(dn, fofs, len);
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index b2645a18a596..b681d0f23c57 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1177,7 +1177,7 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 		return false;
 	}
 
-	*nofs = ofs_of_node(&node_folio->page);
+	*nofs = ofs_of_node(node_folio);
 	source_blkaddr = data_blkaddr(NULL, node_folio, ofs_in_node);
 	f2fs_folio_put(node_folio, true);
 
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index a2258883ca77..db81c54ef7f6 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1479,12 +1479,12 @@ static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
 	if (unlikely(nid != nid_of_node(folio) ||
 		(ntype == NODE_TYPE_INODE && !IS_INODE(page)) ||
 		(ntype == NODE_TYPE_XATTR &&
-		!f2fs_has_xattr_block(ofs_of_node(page))) ||
+		!f2fs_has_xattr_block(ofs_of_node(folio))) ||
 		time_to_inject(sbi, FAULT_INCONSISTENT_FOOTER))) {
 		f2fs_warn(sbi, "inconsistent node block, node_type:%d, nid:%lu, "
 			  "node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]",
 			  ntype, nid, nid_of_node(folio), ino_of_node(folio),
-			  ofs_of_node(page), cpver_of_node(folio),
+			  ofs_of_node(folio), cpver_of_node(folio),
 			  next_blkaddr_of_node(folio));
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_handle_error(sbi, ERROR_INCONSISTENT_FOOTER);
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index d366e2e25498..fecbd0c4aea5 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -255,9 +255,9 @@ static inline nid_t nid_of_node(const struct folio *node_folio)
 	return le32_to_cpu(rn->footer.nid);
 }
 
-static inline unsigned int ofs_of_node(const struct page *node_page)
+static inline unsigned int ofs_of_node(const struct folio *node_folio)
 {
-	struct f2fs_node *rn = F2FS_NODE(node_page);
+	struct f2fs_node *rn = F2FS_NODE(&node_folio->page);
 	unsigned flag = le32_to_cpu(rn->footer.flag);
 	return flag >> OFFSET_BIT_SHIFT;
 }
@@ -352,7 +352,7 @@ static inline bool is_recoverable_dnode(const struct folio *folio)
  */
 static inline bool IS_DNODE(const struct folio *node_folio)
 {
-	unsigned int ofs = ofs_of_node(&node_folio->page);
+	unsigned int ofs = ofs_of_node(node_folio);
 
 	if (f2fs_has_xattr_block(ofs))
 		return true;
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 3bfcf5c297a5..7f5d7499bd68 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -552,7 +552,7 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 	if (IS_ERR(node_folio))
 		return PTR_ERR(node_folio);
 
-	offset = ofs_of_node(&node_folio->page);
+	offset = ofs_of_node(node_folio);
 	ino = ino_of_node(node_folio);
 	f2fs_folio_put(node_folio, true);
 
@@ -632,7 +632,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 		err = f2fs_recover_inline_xattr(inode, folio);
 		if (err)
 			goto out;
-	} else if (f2fs_has_xattr_block(ofs_of_node(&folio->page))) {
+	} else if (f2fs_has_xattr_block(ofs_of_node(folio))) {
 		err = f2fs_recover_xattr_data(inode, folio);
 		if (!err)
 			recovered++;
@@ -648,7 +648,7 @@ 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(&folio->page), inode);
+	start = f2fs_start_bidx_of_node(ofs_of_node(folio), inode);
 	end = start + ADDRS_PER_PAGE(&folio->page, inode);
 
 	set_new_dnode(&dn, inode, NULL, NULL, 0);
@@ -670,10 +670,10 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 
 	f2fs_bug_on(sbi, ni.ino != ino_of_node(folio));
 
-	if (ofs_of_node(&dn.node_folio->page) != ofs_of_node(&folio->page)) {
+	if (ofs_of_node(dn.node_folio) != ofs_of_node(folio)) {
 		f2fs_warn(sbi, "Inconsistent ofs_of_node, ino:%lu, ofs:%u, %u",
-			  inode->i_ino, ofs_of_node(&dn.node_folio->page),
-			  ofs_of_node(&folio->page));
+			  inode->i_ino, ofs_of_node(dn.node_folio),
+			  ofs_of_node(folio));
 		err = -EFSCORRUPTED;
 		f2fs_handle_error(sbi, ERROR_INCONSISTENT_FOOTER);
 		goto err;
@@ -760,7 +760,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 
 	copy_node_footer(dn.node_folio, folio);
 	fill_node_footer(dn.node_folio, dn.nid, ni.ino,
-					ofs_of_node(&folio->page), false);
+					ofs_of_node(folio), false);
 	folio_mark_dirty(dn.node_folio);
 err:
 	f2fs_put_dnode(&dn);
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 35/60] f2fs: Pass a folio to get_dnode_base()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (33 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 34/60] f2fs: Pass a folio to ofs_of_node() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 36/60] f2fs: Pass a folio to ADDRS_PER_PAGE() Matthew Wilcox (Oracle)
                   ` (26 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/f2fs.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index f98d83ccd1e2..3463fa414b55 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3039,20 +3039,20 @@ static inline __le32 *blkaddr_in_node(struct f2fs_node *node)
 
 static inline int f2fs_has_extra_attr(struct inode *inode);
 static inline unsigned int get_dnode_base(struct inode *inode,
-					struct page *node_page)
+					struct folio *node_folio)
 {
-	if (!IS_INODE(node_page))
+	if (!IS_INODE(&node_folio->page))
 		return 0;
 
 	return inode ? get_extra_isize(inode) :
-			offset_in_addr(&F2FS_NODE(node_page)->i);
+			offset_in_addr(&F2FS_NODE(&node_folio->page)->i);
 }
 
 static inline __le32 *get_dnode_addr(struct inode *inode,
 					struct folio *node_folio)
 {
 	return blkaddr_in_node(F2FS_NODE(&node_folio->page)) +
-			get_dnode_base(inode, &node_folio->page);
+			get_dnode_base(inode, node_folio);
 }
 
 static inline block_t data_blkaddr(struct 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] 65+ messages in thread

* [f2fs-dev] [PATCH 36/60] f2fs: Pass a folio to ADDRS_PER_PAGE()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (34 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 35/60] f2fs: Pass a folio to get_dnode_base() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 37/60] f2fs: Pass a folio to IS_INODE() Matthew Wilcox (Oracle)
                   ` (25 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/file.c          | 18 +++++++++---------
 fs/f2fs/recovery.c      |  4 ++--
 fs/f2fs/segment.c       |  2 +-
 include/linux/f2fs_fs.h |  2 +-
 5 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 198a7093d98b..8624a4eedd7f 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1588,7 +1588,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_folio->page, inode);
+	end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
 
 next_block:
 	blkaddr = f2fs_data_blkaddr(&dn);
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index b37a1aae2708..c444f2e43df1 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -489,7 +489,7 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
 			}
 		}
 
-		end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
+		end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
 
 		/* find data/hole in dnode block */
 		for (; dn.ofs_in_node < end_offset;
@@ -815,7 +815,7 @@ int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 		goto out;
 	}
 
-	count = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
+	count = ADDRS_PER_PAGE(dn.node_folio, inode);
 
 	count -= dn.ofs_in_node;
 	f2fs_bug_on(sbi, count < 0);
@@ -1223,7 +1223,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_folio->page, inode);
+		end_offset = ADDRS_PER_PAGE(dn.node_folio, 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);
@@ -1322,7 +1322,7 @@ static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr,
 		goto next;
 	}
 
-	done = min((pgoff_t)ADDRS_PER_PAGE(&dn.node_folio->page, inode) -
+	done = min((pgoff_t)ADDRS_PER_PAGE(dn.node_folio, inode) -
 							dn.ofs_in_node, len);
 	for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) {
 		*blkaddr = f2fs_data_blkaddr(&dn);
@@ -1411,7 +1411,7 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
 			}
 
 			ilen = min((pgoff_t)
-				ADDRS_PER_PAGE(&dn.node_folio->page, dst_inode) -
+				ADDRS_PER_PAGE(dn.node_folio, dst_inode) -
 						dn.ofs_in_node, len - i);
 			do {
 				dn.data_blkaddr = f2fs_data_blkaddr(&dn);
@@ -1707,7 +1707,7 @@ static int f2fs_zero_range(struct inode *inode, loff_t offset, loff_t len,
 				goto out;
 			}
 
-			end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
+			end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
 			end = min(pg_end, end_offset - dn.ofs_in_node + index);
 
 			ret = f2fs_do_zero_range(&dn, index, end);
@@ -3875,7 +3875,7 @@ static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg)
 			break;
 		}
 
-		end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
+		end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
 		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
 		count = round_up(count, fi->i_cluster_size);
 
@@ -4053,7 +4053,7 @@ static int f2fs_reserve_compress_blocks(struct file *filp, unsigned long arg)
 			break;
 		}
 
-		end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
+		end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
 		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
 		count = round_up(count, fi->i_cluster_size);
 
@@ -4217,7 +4217,7 @@ static int f2fs_sec_trim_file(struct file *filp, unsigned long arg)
 			goto out;
 		}
 
-		end_offset = ADDRS_PER_PAGE(&dn.node_folio->page, inode);
+		end_offset = ADDRS_PER_PAGE(dn.node_folio, 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/recovery.c b/fs/f2fs/recovery.c
index 7f5d7499bd68..11e8387419b0 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_folio->page, dn->inode);
+	max_addrs = ADDRS_PER_PAGE(dn->node_folio, 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);
@@ -649,7 +649,7 @@ 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(folio), inode);
-	end = start + ADDRS_PER_PAGE(&folio->page, inode);
+	end = start + ADDRS_PER_PAGE(folio, inode);
 
 	set_new_dnode(&dn, inode, NULL, NULL, 0);
 retry_dn:
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 9bc9bdddc3e0..667611c86f8c 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_folio->page, cow_inode),
+		blen = min((pgoff_t)ADDRS_PER_PAGE(dn.node_folio, cow_inode),
 				len);
 		index = off;
 		for (i = 0; i < blen; i++, dn.ofs_in_node++, index++) {
diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h
index 5206d63b3386..25857877eaec 100644
--- a/include/linux/f2fs_fs.h
+++ b/include/linux/f2fs_fs.h
@@ -268,7 +268,7 @@ struct node_footer {
 /* Node IDs in an Indirect Block */
 #define NIDS_PER_BLOCK		((F2FS_BLKSIZE - sizeof(struct node_footer)) / sizeof(__le32))
 
-#define ADDRS_PER_PAGE(page, inode)	(addrs_per_page(inode, IS_INODE(page)))
+#define ADDRS_PER_PAGE(folio, inode)	(addrs_per_page(inode, IS_INODE(&folio->page)))
 
 #define	NODE_DIR1_BLOCK		(DEF_ADDRS_PER_INODE + 1)
 #define	NODE_DIR2_BLOCK		(DEF_ADDRS_PER_INODE + 2)
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 37/60] f2fs: Pass a folio to IS_INODE()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (35 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 36/60] f2fs: Pass a folio to ADDRS_PER_PAGE() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 38/60] f2fs: Add folio counterparts to page_private_flags functions Matthew Wilcox (Oracle)
                   ` (24 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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.  Also make it const to help
the compiler.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/f2fs.h          |  6 +++---
 fs/f2fs/file.c          |  2 +-
 fs/f2fs/gc.c            |  2 +-
 fs/f2fs/inline.c        |  2 +-
 fs/f2fs/inode.c         |  2 +-
 fs/f2fs/node.c          | 14 ++++++--------
 fs/f2fs/recovery.c      |  8 ++++----
 include/linux/f2fs_fs.h |  2 +-
 8 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 3463fa414b55..f6f566cf065f 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3019,9 +3019,9 @@ static inline void f2fs_radix_tree_insert(struct radix_tree_root *root,
 
 #define RAW_IS_INODE(p)	((p)->footer.nid == (p)->footer.ino)
 
-static inline bool IS_INODE(struct page *page)
+static inline bool IS_INODE(const struct folio *folio)
 {
-	struct f2fs_node *p = F2FS_NODE(page);
+	struct f2fs_node *p = F2FS_NODE(&folio->page);
 
 	return RAW_IS_INODE(p);
 }
@@ -3041,7 +3041,7 @@ static inline int f2fs_has_extra_attr(struct inode *inode);
 static inline unsigned int get_dnode_base(struct inode *inode,
 					struct folio *node_folio)
 {
-	if (!IS_INODE(&node_folio->page))
+	if (!IS_INODE(node_folio))
 		return 0;
 
 	return inode ? get_extra_isize(inode) :
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index c444f2e43df1..8995b128c29c 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -820,7 +820,7 @@ int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 	count -= dn.ofs_in_node;
 	f2fs_bug_on(sbi, count < 0);
 
-	if (dn.ofs_in_node || IS_INODE(&dn.node_folio->page)) {
+	if (dn.ofs_in_node || IS_INODE(dn.node_folio)) {
 		f2fs_truncate_data_blocks_range(&dn, count);
 		free_from += count;
 	}
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index b681d0f23c57..58977f05f3b3 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1162,7 +1162,7 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 		return false;
 	}
 
-	if (IS_INODE(&node_folio->page)) {
+	if (IS_INODE(node_folio)) {
 		base = offset_in_addr(F2FS_INODE(node_folio));
 		max_addrs = DEF_ADDRS_PER_INODE;
 	} else {
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 9851310cdb87..51adc43d5a5c 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -305,7 +305,7 @@ int f2fs_recover_inline_data(struct inode *inode, struct folio *nfolio)
 	 *    x       o  -> remove data blocks, and then recover inline_data
 	 *    x       x  -> recover data blocks
 	 */
-	if (IS_INODE(&nfolio->page))
+	if (IS_INODE(nfolio))
 		ri = F2FS_INODE(nfolio);
 
 	if (f2fs_has_inline_data(inode) &&
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 68510c2d90a9..9d532ae131d7 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -124,7 +124,7 @@ bool f2fs_enable_inode_chksum(struct f2fs_sb_info *sbi, struct folio *folio)
 	if (!f2fs_sb_has_inode_chksum(sbi))
 		return false;
 
-	if (!IS_INODE(&folio->page) || !(ri->i_inline & F2FS_EXTRA_ATTR))
+	if (!IS_INODE(folio) || !(ri->i_inline & F2FS_EXTRA_ATTR))
 		return false;
 
 	if (!F2FS_FITS_IN_INODE(ri, le16_to_cpu(ri->i_extra_isize),
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index db81c54ef7f6..edc9c57daebd 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -973,7 +973,7 @@ static int truncate_dnode(struct dnode_of_data *dn)
 	else if (IS_ERR(folio))
 		return PTR_ERR(folio);
 
-	if (IS_INODE(&folio->page) || ino_of_node(folio) != dn->inode->i_ino) {
+	if (IS_INODE(folio) || ino_of_node(folio) != 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(folio));
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
@@ -1474,10 +1474,8 @@ static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
 					struct folio *folio, pgoff_t nid,
 					enum node_type ntype)
 {
-	struct page *page = &folio->page;
-
 	if (unlikely(nid != nid_of_node(folio) ||
-		(ntype == NODE_TYPE_INODE && !IS_INODE(page)) ||
+		(ntype == NODE_TYPE_INODE && !IS_INODE(folio)) ||
 		(ntype == NODE_TYPE_XATTR &&
 		!f2fs_has_xattr_block(ofs_of_node(folio))) ||
 		time_to_inject(sbi, FAULT_INCONSISTENT_FOOTER))) {
@@ -1867,7 +1865,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 			if (!atomic || folio == last_folio) {
 				set_fsync_mark(folio, 1);
 				percpu_counter_inc(&sbi->rf_node_block_count);
-				if (IS_INODE(&folio->page)) {
+				if (IS_INODE(folio)) {
 					if (is_inode_flag_set(inode,
 								FI_DIRTY_INODE))
 						f2fs_update_inode(inode, folio);
@@ -1976,7 +1974,7 @@ void f2fs_flush_inline_data(struct f2fs_sb_info *sbi)
 		for (i = 0; i < nr_folios; i++) {
 			struct folio *folio = fbatch.folios[i];
 
-			if (!IS_INODE(&folio->page))
+			if (!IS_INODE(folio))
 				continue;
 
 			folio_lock(folio);
@@ -2077,7 +2075,7 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 			}
 
 			/* flush dirty inode */
-			if (IS_INODE(&folio->page) && flush_dirty_inode(folio))
+			if (IS_INODE(folio) && flush_dirty_inode(folio))
 				goto lock_node;
 write_node:
 			f2fs_folio_wait_writeback(folio, NODE, true, true);
@@ -2213,7 +2211,7 @@ static bool f2fs_dirty_node_folio(struct address_space *mapping,
 	if (!folio_test_uptodate(folio))
 		folio_mark_uptodate(folio);
 #ifdef CONFIG_F2FS_CHECK_FS
-	if (IS_INODE(&folio->page))
+	if (IS_INODE(folio))
 		f2fs_inode_chksum_set(F2FS_M_SB(mapping), folio);
 #endif
 	if (filemap_dirty_folio(mapping, folio)) {
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 11e8387419b0..83d39fbd2293 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -437,7 +437,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 			bool quota_inode = false;
 
 			if (!check_only &&
-					IS_INODE(&folio->page) &&
+					IS_INODE(folio) &&
 					is_dent_dnode(folio)) {
 				err = f2fs_recover_inode_page(sbi, folio);
 				if (err) {
@@ -463,7 +463,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
 		}
 		entry->blkaddr = blkaddr;
 
-		if (IS_INODE(&folio->page) && is_dent_dnode(folio))
+		if (IS_INODE(folio) && is_dent_dnode(folio))
 			entry->last_dentry = blkaddr;
 next:
 		/* check next segment */
@@ -628,7 +628,7 @@ 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(&folio->page)) {
+	if (IS_INODE(folio)) {
 		err = f2fs_recover_inline_xattr(inode, folio);
 		if (err)
 			goto out;
@@ -809,7 +809,7 @@ 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(&folio->page)) {
+		if (IS_INODE(folio)) {
 			err = recover_inode(entry->inode, folio);
 			if (err) {
 				f2fs_folio_put(folio, true);
diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h
index 25857877eaec..2f8b8bfc0e73 100644
--- a/include/linux/f2fs_fs.h
+++ b/include/linux/f2fs_fs.h
@@ -268,7 +268,7 @@ struct node_footer {
 /* Node IDs in an Indirect Block */
 #define NIDS_PER_BLOCK		((F2FS_BLKSIZE - sizeof(struct node_footer)) / sizeof(__le32))
 
-#define ADDRS_PER_PAGE(folio, inode)	(addrs_per_page(inode, IS_INODE(&folio->page)))
+#define ADDRS_PER_PAGE(folio, inode)	(addrs_per_page(inode, IS_INODE(folio)))
 
 #define	NODE_DIR1_BLOCK		(DEF_ADDRS_PER_INODE + 1)
 #define	NODE_DIR2_BLOCK		(DEF_ADDRS_PER_INODE + 2)
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 38/60] f2fs: Add folio counterparts to page_private_flags functions
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (36 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 37/60] f2fs: Pass a folio to IS_INODE() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 39/60] f2fs: Use a folio in f2fs_is_cp_guaranteed() Matthew Wilcox (Oracle)
                   ` (23 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Name these new functions folio_test_f2fs_*(), folio_set_f2fs_*() and
folio_clear_f2fs_*().  Convert all callers which currently have a folio
and cast back to a page.

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

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 07ca10c66649..db3831f7f2f5 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -485,7 +485,7 @@ static bool f2fs_dirty_meta_folio(struct address_space *mapping,
 		folio_mark_uptodate(folio);
 	if (filemap_dirty_folio(mapping, folio)) {
 		inc_page_count(F2FS_M_SB(mapping), F2FS_DIRTY_META);
-		set_page_private_reference(&folio->page);
+		folio_set_f2fs_reference(folio);
 		return true;
 	}
 	return false;
@@ -1045,7 +1045,7 @@ void f2fs_update_dirty_folio(struct inode *inode, struct folio *folio)
 	inode_inc_dirty_pages(inode);
 	spin_unlock(&sbi->inode_lock[type]);
 
-	set_page_private_reference(&folio->page);
+	folio_set_f2fs_reference(folio);
 }
 
 void f2fs_remove_dirty_inode(struct inode *inode)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 8624a4eedd7f..da6e80d70e43 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -360,7 +360,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);
-		clear_page_private_gcing(&folio->page);
+		folio_clear_f2fs_gcing(folio);
 		folio_end_writeback(folio);
 	}
 	if (!get_pages(sbi, F2FS_WB_CP_DATA) &&
@@ -2651,7 +2651,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
 
 	/* Use COW inode to make dnode_of_data for atomic write */
 	atomic_commit = f2fs_is_atomic_file(inode) &&
-				page_private_atomic(folio_page(folio, 0));
+				folio_test_f2fs_atomic(folio);
 	if (atomic_commit)
 		set_new_dnode(&dn, F2FS_I(inode)->cow_inode, NULL, NULL, 0);
 	else
@@ -2682,7 +2682,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
 	/* This page is already truncated */
 	if (fio->old_blkaddr == NULL_ADDR) {
 		folio_clear_uptodate(folio);
-		clear_page_private_gcing(folio_page(folio, 0));
+		folio_clear_f2fs_gcing(folio);
 		goto out_writepage;
 	}
 got_it:
@@ -2752,7 +2752,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
 	trace_f2fs_do_write_data_page(folio, OPU);
 	set_inode_flag(inode, FI_APPEND_WRITE);
 	if (atomic_commit)
-		clear_page_private_atomic(folio_page(folio, 0));
+		folio_clear_f2fs_atomic(folio);
 out_writepage:
 	f2fs_put_dnode(&dn);
 out:
@@ -3375,7 +3375,7 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
 			f2fs_do_read_inline_data(folio, ifolio);
 			set_inode_flag(inode, FI_DATA_EXIST);
 			if (inode->i_nlink)
-				set_page_private_inline(&ifolio->page);
+				folio_set_f2fs_inline(ifolio);
 			goto out;
 		}
 		err = f2fs_convert_inline_folio(&dn, folio);
@@ -3695,7 +3695,7 @@ static int f2fs_write_end(struct file *file,
 	folio_mark_dirty(folio);
 
 	if (f2fs_is_atomic_file(inode))
-		set_page_private_atomic(folio_page(folio, 0));
+		folio_set_f2fs_atomic(folio);
 
 	if (pos + copied > i_size_read(inode) &&
 	    !f2fs_verity_in_progress(inode)) {
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index f6f566cf065f..02759cd93a3e 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2461,6 +2461,13 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
 }
 
 #define PAGE_PRIVATE_GET_FUNC(name, flagname) \
+static inline bool folio_test_f2fs_##name(const struct folio *folio)	\
+{									\
+	unsigned long priv = (unsigned long)folio->private;		\
+	unsigned long v = (1UL << PAGE_PRIVATE_NOT_POINTER) |		\
+			     (1UL << PAGE_PRIVATE_##flagname);		\
+	return (priv & v) == v;						\
+}									\
 static inline bool page_private_##name(struct page *page) \
 { \
 	return PagePrivate(page) && \
@@ -2469,6 +2476,17 @@ static inline bool page_private_##name(struct page *page) \
 }
 
 #define PAGE_PRIVATE_SET_FUNC(name, flagname) \
+static inline void folio_set_f2fs_##name(struct folio *folio)		\
+{									\
+	unsigned long v = (1UL << PAGE_PRIVATE_NOT_POINTER) |		\
+			     (1UL << PAGE_PRIVATE_##flagname);		\
+	if (!folio->private)						\
+		folio_attach_private(folio, (void *)v);			\
+	else {								\
+		v |= (unsigned long)folio->private;			\
+		folio->private = (void *)v;				\
+	}								\
+}									\
 static inline void set_page_private_##name(struct page *page) \
 { \
 	if (!PagePrivate(page)) \
@@ -2478,6 +2496,16 @@ static inline void set_page_private_##name(struct page *page) \
 }
 
 #define PAGE_PRIVATE_CLEAR_FUNC(name, flagname) \
+static inline void folio_clear_f2fs_##name(struct folio *folio)		\
+{									\
+	unsigned long v = (unsigned long)folio->private;		\
+									\
+	v &= ~(1UL << PAGE_PRIVATE_##flagname);				\
+	if (v == (1UL << PAGE_PRIVATE_NOT_POINTER))			\
+		folio_detach_private(folio);				\
+	else								\
+		folio->private = (void *)v;				\
+}									\
 static inline void clear_page_private_##name(struct page *page) \
 { \
 	clear_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 8995b128c29c..5b8614db3faa 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1453,7 +1453,7 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
 
 			memcpy_folio(fdst, 0, fsrc, 0, PAGE_SIZE);
 			folio_mark_dirty(fdst);
-			set_page_private_gcing(&fdst->page);
+			folio_set_f2fs_gcing(fdst);
 			f2fs_folio_put(fdst, true);
 			f2fs_folio_put(fsrc, true);
 
@@ -2977,7 +2977,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
 			f2fs_folio_wait_writeback(folio, DATA, true, true);
 
 			folio_mark_dirty(folio);
-			set_page_private_gcing(&folio->page);
+			folio_set_f2fs_gcing(folio);
 			f2fs_folio_put(folio, true);
 
 			idx++;
@@ -4414,7 +4414,7 @@ static int redirty_blocks(struct inode *inode, pgoff_t page_idx, int len)
 		f2fs_folio_wait_writeback(folio, DATA, true, true);
 
 		folio_mark_dirty(folio);
-		set_page_private_gcing(&folio->page);
+		folio_set_f2fs_gcing(folio);
 		redirty_idx = folio_next_index(folio);
 		folio_unlock(folio);
 		folio_put_refs(folio, 2);
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 58977f05f3b3..1ed43015ca50 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1473,7 +1473,7 @@ static int move_data_page(struct inode *inode, block_t bidx, int gc_type,
 			goto out;
 		}
 		folio_mark_dirty(folio);
-		set_page_private_gcing(&folio->page);
+		folio_set_f2fs_gcing(folio);
 	} else {
 		struct f2fs_io_info fio = {
 			.sbi = F2FS_I_SB(inode),
@@ -1499,11 +1499,11 @@ static int move_data_page(struct inode *inode, block_t bidx, int gc_type,
 			f2fs_remove_dirty_inode(inode);
 		}
 
-		set_page_private_gcing(&folio->page);
+		folio_set_f2fs_gcing(folio);
 
 		err = f2fs_do_write_data_page(&fio);
 		if (err) {
-			clear_page_private_gcing(&folio->page);
+			folio_clear_f2fs_gcing(folio);
 			if (err == -ENOMEM) {
 				memalloc_retry_wait(GFP_NOFS);
 				goto retry;
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 51adc43d5a5c..58ac831ef704 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -206,7 +206,7 @@ int f2fs_convert_inline_folio(struct dnode_of_data *dn, struct folio *folio)
 
 	/* clear inline data and flag after data writeback */
 	f2fs_truncate_inline_inode(dn->inode, dn->inode_folio, 0);
-	clear_page_private_inline(&dn->inode_folio->page);
+	folio_clear_f2fs_inline(dn->inode_folio);
 clear_out:
 	stat_dec_inline_inode(dn->inode);
 	clear_inode_flag(dn->inode, FI_INLINE_DATA);
@@ -286,7 +286,7 @@ int f2fs_write_inline_data(struct inode *inode, struct folio *folio)
 	set_inode_flag(inode, FI_APPEND_WRITE);
 	set_inode_flag(inode, FI_DATA_EXIST);
 
-	clear_page_private_inline(&ifolio->page);
+	folio_clear_f2fs_inline(ifolio);
 	f2fs_folio_put(ifolio, 1);
 	return 0;
 }
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 9d532ae131d7..c9afdce75a7f 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -749,7 +749,7 @@ void f2fs_update_inode(struct inode *inode, struct folio *node_folio)
 
 	/* deleted inode */
 	if (inode->i_nlink == 0)
-		clear_page_private_inline(&node_folio->page);
+		folio_clear_f2fs_inline(node_folio);
 
 	init_idisk_time(inode);
 #ifdef CONFIG_F2FS_CHECK_FS
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index edc9c57daebd..ab534557a80e 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1985,8 +1985,8 @@ void f2fs_flush_inline_data(struct f2fs_sb_info *sbi)
 				goto unlock;
 
 			/* flush inline_data, if it's async context. */
-			if (page_private_inline(&folio->page)) {
-				clear_page_private_inline(&folio->page);
+			if (folio_test_f2fs_inline(folio)) {
+				folio_clear_f2fs_inline(folio);
 				folio_unlock(folio);
 				flush_inline_data(sbi, ino_of_node(folio));
 				continue;
@@ -2067,8 +2067,8 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 				goto write_node;
 
 			/* flush inline_data */
-			if (page_private_inline(&folio->page)) {
-				clear_page_private_inline(&folio->page);
+			if (folio_test_f2fs_inline(folio)) {
+				folio_clear_f2fs_inline(folio);
 				folio_unlock(folio);
 				flush_inline_data(sbi, ino_of_node(folio));
 				goto lock_node;
@@ -2216,7 +2216,7 @@ static bool f2fs_dirty_node_folio(struct address_space *mapping,
 #endif
 	if (filemap_dirty_folio(mapping, folio)) {
 		inc_page_count(F2FS_M_SB(mapping), F2FS_DIRTY_NODES);
-		set_page_private_reference(&folio->page);
+		folio_set_f2fs_reference(folio);
 		return true;
 	}
 	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] 65+ messages in thread

* [f2fs-dev] [PATCH 39/60] f2fs: Use a folio in f2fs_is_cp_guaranteed()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (37 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 38/60] f2fs: Add folio counterparts to page_private_flags functions Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 40/60] f2fs: Convert set_page_private_data() to folio_set_f2fs_data() Matthew Wilcox (Oracle)
                   ` (22 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert the passed page to a folio and use it throughout.  Removes
a use of fscrypt_is_bounce_page(), which we're trying to remove.

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

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index da6e80d70e43..20add6761d81 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -47,14 +47,15 @@ void f2fs_destroy_bioset(void)
 	bioset_exit(&f2fs_bioset);
 }
 
-bool f2fs_is_cp_guaranteed(struct page *page)
+bool f2fs_is_cp_guaranteed(const struct page *page)
 {
-	struct address_space *mapping = page_folio(page)->mapping;
+	const struct folio *folio = page_folio(page);
+	struct address_space *mapping = folio->mapping;
 	struct inode *inode;
 	struct f2fs_sb_info *sbi;
 
-	if (fscrypt_is_bounce_page(page))
-		return page_private_gcing(fscrypt_pagecache_page(page));
+	if (fscrypt_is_bounce_folio(folio))
+		return folio_test_f2fs_gcing(fscrypt_pagecache_folio(folio));
 
 	inode = mapping->host;
 	sbi = F2FS_I_SB(inode);
@@ -65,7 +66,7 @@ bool f2fs_is_cp_guaranteed(struct page *page)
 		return true;
 
 	if ((S_ISREG(inode->i_mode) && IS_NOQUOTA(inode)) ||
-			page_private_gcing(page))
+			folio_test_f2fs_gcing(folio))
 		return true;
 	return false;
 }
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 02759cd93a3e..065f53006a82 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3990,7 +3990,7 @@ void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
  */
 int __init f2fs_init_bioset(void);
 void f2fs_destroy_bioset(void);
-bool f2fs_is_cp_guaranteed(struct page *page);
+bool f2fs_is_cp_guaranteed(const struct page *page);
 int f2fs_init_bio_entry_cache(void);
 void f2fs_destroy_bio_entry_cache(void);
 void f2fs_submit_read_bio(struct f2fs_sb_info *sbi, struct bio *bio,
diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h
index 56fad33043d5..b334c0538864 100644
--- a/include/linux/fscrypt.h
+++ b/include/linux/fscrypt.h
@@ -332,12 +332,13 @@ static inline struct page *fscrypt_pagecache_page(struct page *bounce_page)
 	return (struct page *)page_private(bounce_page);
 }
 
-static inline bool fscrypt_is_bounce_folio(struct folio *folio)
+static inline bool fscrypt_is_bounce_folio(const struct folio *folio)
 {
 	return folio->mapping == NULL;
 }
 
-static inline struct folio *fscrypt_pagecache_folio(struct folio *bounce_folio)
+static inline
+struct folio *fscrypt_pagecache_folio(const struct folio *bounce_folio)
 {
 	return bounce_folio->private;
 }
@@ -518,7 +519,7 @@ static inline struct page *fscrypt_pagecache_page(struct page *bounce_page)
 	return ERR_PTR(-EINVAL);
 }
 
-static inline bool fscrypt_is_bounce_folio(struct folio *folio)
+static inline bool fscrypt_is_bounce_folio(const struct folio *folio)
 {
 	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] 65+ messages in thread

* [f2fs-dev] [PATCH 40/60] f2fs: Convert set_page_private_data() to folio_set_f2fs_data()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (38 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 39/60] f2fs: Use a folio in f2fs_is_cp_guaranteed() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 41/60] f2fs: Convert get_page_private_data() to folio_get_f2fs_data() Matthew Wilcox (Oracle)
                   ` (21 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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 and operate on it.

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

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 5be1a4396f80..d7346c1fcd62 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1953,7 +1953,7 @@ void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
 		return;
 	}
 
-	set_page_private_data(&cfolio->page, ino);
+	folio_set_f2fs_data(cfolio, ino);
 
 	memcpy(folio_address(cfolio), page_address(page), PAGE_SIZE);
 	folio_mark_uptodate(cfolio);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 065f53006a82..142cbf8bc8f3 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2537,12 +2537,14 @@ static inline unsigned long get_page_private_data(struct page *page)
 	return data >> PAGE_PRIVATE_MAX;
 }
 
-static inline void set_page_private_data(struct page *page, unsigned long data)
+static inline void folio_set_f2fs_data(struct folio *folio, unsigned long data)
 {
-	if (!PagePrivate(page))
-		attach_page_private(page, (void *)0);
-	set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page));
-	page_private(page) |= data << PAGE_PRIVATE_MAX;
+	data = (1UL << PAGE_PRIVATE_NOT_POINTER) | (data << PAGE_PRIVATE_MAX);
+
+	if (!folio_test_private(folio))
+		folio_attach_private(folio, (void *)data);
+	else
+		folio->private = (void *)((unsigned long)folio->private | data);
 }
 
 static inline void clear_page_private_data(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] 65+ messages in thread

* [f2fs-dev] [PATCH 41/60] f2fs: Convert get_page_private_data() to folio_get_f2fs_data()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (39 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 40/60] f2fs: Convert set_page_private_data() to folio_set_f2fs_data() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 42/60] f2fs: Pass a folio to f2fs_compress_write_end_io() Matthew Wilcox (Oracle)
                   ` (20 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The only caller already has a folio so convert this function to be folio
based.

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

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index d7346c1fcd62..4e432df2431f 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -2012,7 +2012,7 @@ void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino)
 				continue;
 			}
 
-			if (ino != get_page_private_data(&folio->page)) {
+			if (ino != folio_get_f2fs_data(folio)) {
 				folio_unlock(folio);
 				continue;
 			}
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 142cbf8bc8f3..1cf3063d2170 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2528,9 +2528,9 @@ PAGE_PRIVATE_CLEAR_FUNC(inline, INLINE_INODE);
 PAGE_PRIVATE_CLEAR_FUNC(gcing, ONGOING_MIGRATION);
 PAGE_PRIVATE_CLEAR_FUNC(atomic, ATOMIC_WRITE);
 
-static inline unsigned long get_page_private_data(struct page *page)
+static inline unsigned long folio_get_f2fs_data(struct folio *folio)
 {
-	unsigned long data = page_private(page);
+	unsigned long data = (unsigned long)folio->private;
 
 	if (!test_bit(PAGE_PRIVATE_NOT_POINTER, &data))
 		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] 65+ messages in thread

* [f2fs-dev] [PATCH 42/60] f2fs: Pass a folio to f2fs_compress_write_end_io()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (40 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 41/60] f2fs: Convert get_page_private_data() to folio_get_f2fs_data() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 43/60] f2fs: Use a folio in f2fs_merge_page_bio() Matthew Wilcox (Oracle)
                   ` (19 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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 | 6 +++---
 fs/f2fs/data.c     | 2 +-
 fs/f2fs/f2fs.h     | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 4e432df2431f..c1334e61823c 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1473,11 +1473,11 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,
 	return -EAGAIN;
 }
 
-void f2fs_compress_write_end_io(struct bio *bio, struct page *page)
+void f2fs_compress_write_end_io(struct bio *bio, struct folio *folio)
 {
+	struct page *page = &folio->page;
 	struct f2fs_sb_info *sbi = bio->bi_private;
-	struct compress_io_ctx *cic =
-			(struct compress_io_ctx *)page_private(page);
+	struct compress_io_ctx *cic = folio->private;
 	enum count_type type = WB_DATA_TYPE(page,
 				f2fs_is_compressed_page(page));
 	int i;
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 20add6761d81..7ea37ff517c6 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -341,7 +341,7 @@ static void f2fs_write_end_io(struct bio *bio)
 
 #ifdef CONFIG_F2FS_FS_COMPRESSION
 		if (f2fs_is_compressed_page(&folio->page)) {
-			f2fs_compress_write_end_io(bio, &folio->page);
+			f2fs_compress_write_end_io(bio, folio);
 			continue;
 		}
 #endif
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 1cf3063d2170..f86c89a9dd99 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4481,7 +4481,7 @@ int f2fs_prepare_compress_overwrite(struct inode *inode,
 bool f2fs_compress_write_end(struct inode *inode, void *fsdata,
 					pgoff_t index, unsigned copied);
 int f2fs_truncate_partial_cluster(struct inode *inode, u64 from, bool lock);
-void f2fs_compress_write_end_io(struct bio *bio, struct page *page);
+void f2fs_compress_write_end_io(struct bio *bio, struct folio *folio);
 bool f2fs_is_compress_backend_ready(struct inode *inode);
 bool f2fs_is_compress_level_valid(int alg, int lvl);
 int __init f2fs_init_compress_mempool(void);
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 43/60] f2fs: Use a folio in f2fs_merge_page_bio()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (41 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 42/60] f2fs: Pass a folio to f2fs_compress_write_end_io() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 44/60] f2fs: Use a bio in f2fs_submit_page_write() Matthew Wilcox (Oracle)
                   ` (18 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

We have two folios to deal with here; one carries the metadata and the
other points to the data.  They may be the same, but if it's compressed,
the data_folio will differ from the metadata folio.

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 7ea37ff517c6..01c0358ef66f 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -886,15 +886,15 @@ void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
 int f2fs_merge_page_bio(struct f2fs_io_info *fio)
 {
 	struct bio *bio = *fio->bio;
-	struct page *page = fio->encrypted_page ?
-			fio->encrypted_page : fio->page;
+	struct folio *data_folio = fio->encrypted_page ?
+			page_folio(fio->encrypted_page) : fio->folio;
 	struct folio *folio = fio->folio;
 
 	if (!f2fs_is_valid_blkaddr(fio->sbi, fio->new_blkaddr,
 			__is_meta_io(fio) ? META_GENERIC : DATA_GENERIC))
 		return -EFSCORRUPTED;
 
-	trace_f2fs_submit_folio_bio(page_folio(page), fio);
+	trace_f2fs_submit_folio_bio(data_folio, fio);
 
 	if (bio && !page_is_mergeable(fio->sbi, bio, *fio->last_block,
 						fio->new_blkaddr))
@@ -905,16 +905,16 @@ int f2fs_merge_page_bio(struct f2fs_io_info *fio)
 		f2fs_set_bio_crypt_ctx(bio, folio->mapping->host,
 				folio->index, fio, GFP_NOIO);
 
-		add_bio_entry(fio->sbi, bio, page, fio->temp);
+		add_bio_entry(fio->sbi, bio, &data_folio->page, fio->temp);
 	} else {
-		if (add_ipu_page(fio, &bio, page))
+		if (add_ipu_page(fio, &bio, &data_folio->page))
 			goto alloc_new;
 	}
 
 	if (fio->io_wbc)
 		wbc_account_cgroup_owner(fio->io_wbc, folio, folio_size(folio));
 
-	inc_page_count(fio->sbi, WB_DATA_TYPE(page, false));
+	inc_page_count(fio->sbi, WB_DATA_TYPE(&data_folio->page, false));
 
 	*fio->last_block = fio->new_blkaddr;
 	*fio->bio = bio;
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 44/60] f2fs: Use a bio in f2fs_submit_page_write()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (42 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 43/60] f2fs: Use a folio in f2fs_merge_page_bio() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 45/60] f2fs: Pass a folio to WB_DATA_TYPE() and f2fs_is_cp_guaranteed() Matthew Wilcox (Oracle)
                   ` (17 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Convert bio_page to bio_folio and use it throughout.

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

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 01c0358ef66f..4649c0a510a0 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -949,7 +949,7 @@ void f2fs_submit_page_write(struct f2fs_io_info *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;
-	struct page *bio_page;
+	struct folio *bio_folio;
 	enum count_type type;
 
 	f2fs_bug_on(sbi, is_read_io(fio->op));
@@ -980,33 +980,33 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
 	verify_fio_blkaddr(fio);
 
 	if (fio->encrypted_page)
-		bio_page = fio->encrypted_page;
+		bio_folio = page_folio(fio->encrypted_page);
 	else if (fio->compressed_page)
-		bio_page = fio->compressed_page;
+		bio_folio = page_folio(fio->compressed_page);
 	else
-		bio_page = fio->page;
+		bio_folio = fio->folio;
 
 	/* set submitted = true as a return value */
 	fio->submitted = 1;
 
-	type = WB_DATA_TYPE(bio_page, fio->compressed_page);
+	type = WB_DATA_TYPE(&bio_folio->page, fio->compressed_page);
 	inc_page_count(sbi, type);
 
 	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_inode(fio),
-				page_folio(bio_page)->index, fio)))
+				bio_folio->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_inode(fio),
-				page_folio(bio_page)->index, fio, GFP_NOIO);
+				bio_folio->index, fio, GFP_NOIO);
 		io->fio = *fio;
 	}
 
-	if (bio_add_page(io->bio, bio_page, PAGE_SIZE, 0) < PAGE_SIZE) {
+	if (!bio_add_folio(io->bio, bio_folio, folio_size(bio_folio), 0)) {
 		__submit_merged_bio(io);
 		goto alloc_new;
 	}
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 45/60] f2fs: Pass a folio to WB_DATA_TYPE() and f2fs_is_cp_guaranteed()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (43 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 44/60] f2fs: Use a bio in f2fs_submit_page_write() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 46/60] f2fs: Use a folio iterator in f2fs_handle_step_decompress() Matthew Wilcox (Oracle)
                   ` (16 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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/compress.c |  2 +-
 fs/f2fs/data.c     | 11 +++++------
 fs/f2fs/f2fs.h     |  6 +++---
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index c1334e61823c..10b4230607de 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1478,7 +1478,7 @@ void f2fs_compress_write_end_io(struct bio *bio, struct folio *folio)
 	struct page *page = &folio->page;
 	struct f2fs_sb_info *sbi = bio->bi_private;
 	struct compress_io_ctx *cic = folio->private;
-	enum count_type type = WB_DATA_TYPE(page,
+	enum count_type type = WB_DATA_TYPE(folio,
 				f2fs_is_compressed_page(page));
 	int i;
 
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 4649c0a510a0..067270f9486b 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -47,9 +47,8 @@ void f2fs_destroy_bioset(void)
 	bioset_exit(&f2fs_bioset);
 }
 
-bool f2fs_is_cp_guaranteed(const struct page *page)
+bool f2fs_is_cp_guaranteed(const struct folio *folio)
 {
-	const struct folio *folio = page_folio(page);
 	struct address_space *mapping = folio->mapping;
 	struct inode *inode;
 	struct f2fs_sb_info *sbi;
@@ -346,7 +345,7 @@ static void f2fs_write_end_io(struct bio *bio)
 		}
 #endif
 
-		type = WB_DATA_TYPE(&folio->page, false);
+		type = WB_DATA_TYPE(folio, false);
 
 		if (unlikely(bio->bi_status != BLK_STS_OK)) {
 			mapping_set_error(folio->mapping, -EIO);
@@ -713,7 +712,7 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
 		wbc_account_cgroup_owner(fio->io_wbc, fio_folio, PAGE_SIZE);
 
 	inc_page_count(fio->sbi, is_read_io(fio->op) ?
-			__read_io_type(data_folio) : WB_DATA_TYPE(fio->page, false));
+			__read_io_type(data_folio) : WB_DATA_TYPE(fio->folio, false));
 
 	if (is_read_io(bio_op(bio)))
 		f2fs_submit_read_bio(fio->sbi, bio, fio->type);
@@ -914,7 +913,7 @@ int f2fs_merge_page_bio(struct f2fs_io_info *fio)
 	if (fio->io_wbc)
 		wbc_account_cgroup_owner(fio->io_wbc, folio, folio_size(folio));
 
-	inc_page_count(fio->sbi, WB_DATA_TYPE(&data_folio->page, false));
+	inc_page_count(fio->sbi, WB_DATA_TYPE(data_folio, false));
 
 	*fio->last_block = fio->new_blkaddr;
 	*fio->bio = bio;
@@ -989,7 +988,7 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
 	/* set submitted = true as a return value */
 	fio->submitted = 1;
 
-	type = WB_DATA_TYPE(&bio_folio->page, fio->compressed_page);
+	type = WB_DATA_TYPE(bio_folio, fio->compressed_page);
 	inc_page_count(sbi, type);
 
 	if (io->bio &&
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index f86c89a9dd99..5c1c21808489 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1123,8 +1123,8 @@ struct f2fs_sm_info {
  * f2fs monitors the number of several block types such as on-writeback,
  * dirty dentry blocks, dirty node blocks, and dirty meta blocks.
  */
-#define WB_DATA_TYPE(p, f)			\
-	(f || f2fs_is_cp_guaranteed(p) ? F2FS_WB_CP_DATA : F2FS_WB_DATA)
+#define WB_DATA_TYPE(folio, f)			\
+	(f || f2fs_is_cp_guaranteed(folio) ? F2FS_WB_CP_DATA : F2FS_WB_DATA)
 enum count_type {
 	F2FS_DIRTY_DENTS,
 	F2FS_DIRTY_DATA,
@@ -3992,7 +3992,7 @@ void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
  */
 int __init f2fs_init_bioset(void);
 void f2fs_destroy_bioset(void);
-bool f2fs_is_cp_guaranteed(const struct page *page);
+bool f2fs_is_cp_guaranteed(const struct folio *folio);
 int f2fs_init_bio_entry_cache(void);
 void f2fs_destroy_bio_entry_cache(void);
 void f2fs_submit_read_bio(struct f2fs_sb_info *sbi, struct bio *bio,
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 46/60] f2fs: Use a folio iterator in f2fs_handle_step_decompress()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (44 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 45/60] f2fs: Pass a folio to WB_DATA_TYPE() and f2fs_is_cp_guaranteed() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 47/60] f2fs: Pass a folio to f2fs_end_read_compressed_page() Matthew Wilcox (Oracle)
                   ` (15 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Change from bio_for_each_segment_all() to bio_for_each_folio_all()
to iterate over each folio instead of each page.

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

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 067270f9486b..a3f231d47bdd 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -233,16 +233,15 @@ static void f2fs_verify_and_finish_bio(struct bio *bio, bool in_task)
 static void f2fs_handle_step_decompress(struct bio_post_read_ctx *ctx,
 		bool in_task)
 {
-	struct bio_vec *bv;
-	struct bvec_iter_all iter_all;
+	struct folio_iter fi;
 	bool all_compressed = true;
 	block_t blkaddr = ctx->fs_blkaddr;
 
-	bio_for_each_segment_all(bv, ctx->bio, iter_all) {
-		struct page *page = bv->bv_page;
+	bio_for_each_folio_all(fi, ctx->bio) {
+		struct folio *folio = fi.folio;
 
-		if (f2fs_is_compressed_page(page))
-			f2fs_end_read_compressed_page(page, false, blkaddr,
+		if (f2fs_is_compressed_page(&folio->page))
+			f2fs_end_read_compressed_page(&folio->page, false, blkaddr,
 						      in_task);
 		else
 			all_compressed = 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] 65+ messages in thread

* [f2fs-dev] [PATCH 47/60] f2fs: Pass a folio to f2fs_end_read_compressed_page()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (45 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 46/60] f2fs: Use a folio iterator in f2fs_handle_step_decompress() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 48/60] f2fs: Use a folio iterator in f2fs_verify_bio() Matthew Wilcox (Oracle)
                   ` (14 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/f2fs/compress.c | 7 +++----
 fs/f2fs/data.c     | 4 ++--
 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 10b4230607de..5847d22a5833 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -801,11 +801,10 @@ void f2fs_decompress_cluster(struct decompress_io_ctx *dic, bool in_task)
  * page being waited on in the cluster, and if so, it decompresses the cluster
  * (or in the case of a failure, cleans up without actually decompressing).
  */
-void f2fs_end_read_compressed_page(struct page *page, bool failed,
+void f2fs_end_read_compressed_page(struct folio *folio, bool failed,
 		block_t blkaddr, bool in_task)
 {
-	struct decompress_io_ctx *dic =
-			(struct decompress_io_ctx *)page_private(page);
+	struct decompress_io_ctx *dic = folio->private;
 	struct f2fs_sb_info *sbi = dic->sbi;
 
 	dec_page_count(sbi, F2FS_RD_DATA);
@@ -813,7 +812,7 @@ void f2fs_end_read_compressed_page(struct page *page, bool failed,
 	if (failed)
 		WRITE_ONCE(dic->failed, true);
 	else if (blkaddr && in_task)
-		f2fs_cache_compressed_page(sbi, page,
+		f2fs_cache_compressed_page(sbi, &folio->page,
 					dic->inode->i_ino, blkaddr);
 
 	if (atomic_dec_and_test(&dic->remaining_pages))
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index a3f231d47bdd..ccf410ef9b70 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -144,7 +144,7 @@ static void f2fs_finish_read_bio(struct bio *bio, bool in_task)
 
 		if (f2fs_is_compressed_page(&folio->page)) {
 			if (ctx && !ctx->decompression_attempted)
-				f2fs_end_read_compressed_page(&folio->page, true, 0,
+				f2fs_end_read_compressed_page(folio, true, 0,
 							in_task);
 			f2fs_put_folio_dic(folio, in_task);
 			continue;
@@ -241,7 +241,7 @@ static void f2fs_handle_step_decompress(struct bio_post_read_ctx *ctx,
 		struct folio *folio = fi.folio;
 
 		if (f2fs_is_compressed_page(&folio->page))
-			f2fs_end_read_compressed_page(&folio->page, false, blkaddr,
+			f2fs_end_read_compressed_page(folio, false, blkaddr,
 						      in_task);
 		else
 			all_compressed = false;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 5c1c21808489..68535b917a3a 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4487,7 +4487,7 @@ bool f2fs_is_compress_level_valid(int alg, int lvl);
 int __init f2fs_init_compress_mempool(void);
 void f2fs_destroy_compress_mempool(void);
 void f2fs_decompress_cluster(struct decompress_io_ctx *dic, bool in_task);
-void f2fs_end_read_compressed_page(struct page *page, bool failed,
+void f2fs_end_read_compressed_page(struct folio *folio, bool failed,
 				block_t blkaddr, bool in_task);
 bool f2fs_cluster_is_empty(struct compress_ctx *cc);
 bool f2fs_cluster_can_merge_page(struct compress_ctx *cc, pgoff_t index);
@@ -4561,7 +4561,7 @@ static inline int __init f2fs_init_compress_mempool(void) { return 0; }
 static inline void f2fs_destroy_compress_mempool(void) { }
 static inline void f2fs_decompress_cluster(struct decompress_io_ctx *dic,
 				bool in_task) { }
-static inline void f2fs_end_read_compressed_page(struct page *page,
+static inline void f2fs_end_read_compressed_page(struct folio *folio,
 				bool failed, block_t blkaddr, 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] 65+ messages in thread

* [f2fs-dev] [PATCH 48/60] f2fs: Use a folio iterator in f2fs_verify_bio()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (46 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 47/60] f2fs: Pass a folio to f2fs_end_read_compressed_page() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 49/60] f2fs: Pass a folio to f2fs_is_compressed_page() Matthew Wilcox (Oracle)
                   ` (13 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Change from bio_for_each_segment_all() to bio_for_each_folio_all()
to iterate over each folio instead of each page.

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

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index ccf410ef9b70..cf2c146944bf 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -181,14 +181,13 @@ static void f2fs_verify_bio(struct work_struct *work)
 	 * as those were handled separately by f2fs_end_read_compressed_page().
 	 */
 	if (may_have_compressed_pages) {
-		struct bio_vec *bv;
-		struct bvec_iter_all iter_all;
+		struct folio_iter fi;
 
-		bio_for_each_segment_all(bv, bio, iter_all) {
-			struct page *page = bv->bv_page;
+		bio_for_each_folio_all(fi, bio) {
+			struct folio *folio = fi.folio;
 
-			if (!f2fs_is_compressed_page(page) &&
-			    !fsverity_verify_page(page)) {
+			if (!f2fs_is_compressed_page(&folio->page) &&
+			    !fsverity_verify_page(&folio->page)) {
 				bio->bi_status = BLK_STS_IOERR;
 				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] 65+ messages in thread

* [f2fs-dev] [PATCH 49/60] f2fs: Pass a folio to f2fs_is_compressed_page()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (47 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 48/60] f2fs: Use a folio iterator in f2fs_verify_bio() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-22  6:54   ` Chao Yu via Linux-f2fs-devel
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 50/60] f2fs: Convert get_next_nat_page() to get_next_nat_folio() Matthew Wilcox (Oracle)
                   ` (12 subsequent siblings)
  61 siblings, 1 reply; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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.  Also remove the test for
the private flag; it is redundant with checking folio->private for being
NULL.

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

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 5847d22a5833..24c7489b7427 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -71,17 +71,15 @@ static pgoff_t start_idx_of_cluster(struct compress_ctx *cc)
 	return cc->cluster_idx << cc->log_cluster_size;
 }
 
-bool f2fs_is_compressed_page(struct page *page)
+bool f2fs_is_compressed_page(struct folio *folio)
 {
-	if (!PagePrivate(page))
+	if (!folio->private)
 		return false;
-	if (!page_private(page))
-		return false;
-	if (page_private_nonpointer(page))
+	if (folio_test_f2fs_nonpointer(folio))
 		return false;
 
-	f2fs_bug_on(F2FS_P_SB(page),
-		*((u32 *)page_private(page)) != F2FS_COMPRESSED_PAGE_MAGIC);
+	f2fs_bug_on(F2FS_F_SB(folio),
+		*((u32 *)folio->private) != F2FS_COMPRESSED_PAGE_MAGIC);
 	return true;
 }
 
@@ -1478,7 +1476,7 @@ void f2fs_compress_write_end_io(struct bio *bio, struct folio *folio)
 	struct f2fs_sb_info *sbi = bio->bi_private;
 	struct compress_io_ctx *cic = folio->private;
 	enum count_type type = WB_DATA_TYPE(folio,
-				f2fs_is_compressed_page(page));
+				f2fs_is_compressed_page(folio));
 	int i;
 
 	if (unlikely(bio->bi_status != BLK_STS_OK))
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index cf2c146944bf..116482adf591 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -142,7 +142,7 @@ static void f2fs_finish_read_bio(struct bio *bio, bool in_task)
 	bio_for_each_folio_all(fi, bio) {
 		struct folio *folio = fi.folio;
 
-		if (f2fs_is_compressed_page(&folio->page)) {
+		if (f2fs_is_compressed_page(folio)) {
 			if (ctx && !ctx->decompression_attempted)
 				f2fs_end_read_compressed_page(folio, true, 0,
 							in_task);
@@ -186,7 +186,7 @@ static void f2fs_verify_bio(struct work_struct *work)
 		bio_for_each_folio_all(fi, bio) {
 			struct folio *folio = fi.folio;
 
-			if (!f2fs_is_compressed_page(&folio->page) &&
+			if (!f2fs_is_compressed_page(folio) &&
 			    !fsverity_verify_page(&folio->page)) {
 				bio->bi_status = BLK_STS_IOERR;
 				break;
@@ -239,7 +239,7 @@ static void f2fs_handle_step_decompress(struct bio_post_read_ctx *ctx,
 	bio_for_each_folio_all(fi, ctx->bio) {
 		struct folio *folio = fi.folio;
 
-		if (f2fs_is_compressed_page(&folio->page))
+		if (f2fs_is_compressed_page(folio))
 			f2fs_end_read_compressed_page(folio, false, blkaddr,
 						      in_task);
 		else
@@ -337,7 +337,7 @@ static void f2fs_write_end_io(struct bio *bio)
 		}
 
 #ifdef CONFIG_F2FS_FS_COMPRESSION
-		if (f2fs_is_compressed_page(&folio->page)) {
+		if (f2fs_is_compressed_page(folio)) {
 			f2fs_compress_write_end_io(bio, folio);
 			continue;
 		}
@@ -561,7 +561,7 @@ static bool __has_merged_page(struct bio *bio, struct inode *inode,
 			if (IS_ERR(target))
 				continue;
 		}
-		if (f2fs_is_compressed_page(&target->page)) {
+		if (f2fs_is_compressed_page(target)) {
 			target = f2fs_compress_control_folio(target);
 			if (IS_ERR(target))
 				continue;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 68535b917a3a..48b15e44a41c 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4474,7 +4474,7 @@ enum cluster_check_type {
 	CLUSTER_COMPR_BLKS, /* return # of compressed blocks in a cluster */
 	CLUSTER_RAW_BLKS    /* return # of raw blocks in a cluster */
 };
-bool f2fs_is_compressed_page(struct page *page);
+bool f2fs_is_compressed_page(struct folio *folio);
 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);
@@ -4543,7 +4543,7 @@ void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino);
 		sbi->compr_saved_block += diff;				\
 	} while (0)
 #else
-static inline bool f2fs_is_compressed_page(struct page *page) { return false; }
+static inline bool f2fs_is_compressed_page(struct folio *folio) { return false; }
 static inline bool f2fs_is_compress_backend_ready(struct inode *inode)
 {
 	if (!f2fs_compressed_file(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] 65+ messages in thread

* [f2fs-dev] [PATCH 50/60] f2fs: Convert get_next_nat_page() to get_next_nat_folio()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (48 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 49/60] f2fs: Pass a folio to f2fs_is_compressed_page() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 51/60] f2fs: Pass the nat_blk to __update_nat_bits() Matthew Wilcox (Oracle)
                   ` (11 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Return a folio from this function and convert its one caller.
Removes a call 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 ab534557a80e..7c01206bd3d6 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -135,7 +135,7 @@ static struct folio *get_current_nat_folio(struct f2fs_sb_info *sbi, nid_t 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)
+static struct folio *get_next_nat_folio(struct f2fs_sb_info *sbi, nid_t nid)
 {
 	struct folio *src_folio;
 	struct folio *dst_folio;
@@ -149,7 +149,7 @@ static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
 	/* get current nat block page with lock */
 	src_folio = get_current_nat_folio(sbi, nid);
 	if (IS_ERR(src_folio))
-		return &src_folio->page;
+		return src_folio;
 	dst_folio = f2fs_grab_meta_folio(sbi, dst_off);
 	f2fs_bug_on(sbi, folio_test_dirty(src_folio));
 
@@ -161,7 +161,7 @@ static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
 
 	set_to_next_nat(nm_i, nid);
 
-	return &dst_folio->page;
+	return dst_folio;
 }
 
 static struct nat_entry *__alloc_nat_entry(struct f2fs_sb_info *sbi,
@@ -3010,7 +3010,7 @@ static int __flush_nat_entry_set(struct f2fs_sb_info *sbi,
 	bool to_journal = true;
 	struct f2fs_nat_block *nat_blk;
 	struct nat_entry *ne, *cur;
-	struct page *page = NULL;
+	struct folio *folio = NULL;
 
 	/*
 	 * there are two steps to flush nat entries:
@@ -3024,11 +3024,11 @@ static int __flush_nat_entry_set(struct f2fs_sb_info *sbi,
 	if (to_journal) {
 		down_write(&curseg->journal_rwsem);
 	} else {
-		page = get_next_nat_page(sbi, start_nid);
-		if (IS_ERR(page))
-			return PTR_ERR(page);
+		folio = get_next_nat_folio(sbi, start_nid);
+		if (IS_ERR(folio))
+			return PTR_ERR(folio);
 
-		nat_blk = page_address(page);
+		nat_blk = folio_address(folio);
 		f2fs_bug_on(sbi, !nat_blk);
 	}
 
@@ -3064,8 +3064,8 @@ static int __flush_nat_entry_set(struct f2fs_sb_info *sbi,
 	if (to_journal) {
 		up_write(&curseg->journal_rwsem);
 	} else {
-		__update_nat_bits(sbi, start_nid, page);
-		f2fs_put_page(page, 1);
+		__update_nat_bits(sbi, start_nid, &folio->page);
+		f2fs_folio_put(folio, true);
 	}
 
 	/* Allow dirty nats by node block allocation in write_begin */
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 51/60] f2fs: Pass the nat_blk to __update_nat_bits()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (49 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 50/60] f2fs: Convert get_next_nat_page() to get_next_nat_folio() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 52/60] f2fs: Pass a folio to F2FS_NODE() Matthew Wilcox (Oracle)
                   ` (10 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

The page argument is only used to look up the address of the nat_blk.
Since the caller already has it, pass it in instead.  Also mark it const
as the nat_blk isn't modified by this function.

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

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 7c01206bd3d6..17f74e440084 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2969,11 +2969,10 @@ static void __adjust_nat_entry_set(struct nat_entry_set *nes,
 }
 
 static void __update_nat_bits(struct f2fs_sb_info *sbi, nid_t start_nid,
-						struct page *page)
+		const struct f2fs_nat_block *nat_blk)
 {
 	struct f2fs_nm_info *nm_i = NM_I(sbi);
 	unsigned int nat_index = start_nid / NAT_ENTRY_PER_BLOCK;
-	struct f2fs_nat_block *nat_blk = page_address(page);
 	int valid = 0;
 	int i = 0;
 
@@ -3064,7 +3063,7 @@ static int __flush_nat_entry_set(struct f2fs_sb_info *sbi,
 	if (to_journal) {
 		up_write(&curseg->journal_rwsem);
 	} else {
-		__update_nat_bits(sbi, start_nid, &folio->page);
+		__update_nat_bits(sbi, start_nid, nat_blk);
 		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] 65+ messages in thread

* [f2fs-dev] [PATCH 52/60] f2fs: Pass a folio to F2FS_NODE()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (50 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 51/60] f2fs: Pass the nat_blk to __update_nat_bits() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 53/60] f2fs: Pass a folio to f2fs_cache_compressed_page() Matthew Wilcox (Oracle)
                   ` (9 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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  | 10 +++++-----
 fs/f2fs/inode.c |  8 ++++----
 fs/f2fs/node.c  |  6 +++---
 fs/f2fs/node.h  | 30 +++++++++++++++---------------
 4 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 48b15e44a41c..c5a0d70e0a89 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2051,9 +2051,9 @@ static inline struct f2fs_checkpoint *F2FS_CKPT(struct f2fs_sb_info *sbi)
 	return (struct f2fs_checkpoint *)(sbi->ckpt);
 }
 
-static inline struct f2fs_node *F2FS_NODE(const struct page *page)
+static inline struct f2fs_node *F2FS_NODE(const struct folio *folio)
 {
-	return (struct f2fs_node *)page_address(page);
+	return (struct f2fs_node *)folio_address(folio);
 }
 
 static inline struct f2fs_inode *F2FS_INODE(const struct folio *folio)
@@ -3051,7 +3051,7 @@ static inline void f2fs_radix_tree_insert(struct radix_tree_root *root,
 
 static inline bool IS_INODE(const struct folio *folio)
 {
-	struct f2fs_node *p = F2FS_NODE(&folio->page);
+	struct f2fs_node *p = F2FS_NODE(folio);
 
 	return RAW_IS_INODE(p);
 }
@@ -3075,13 +3075,13 @@ static inline unsigned int get_dnode_base(struct inode *inode,
 		return 0;
 
 	return inode ? get_extra_isize(inode) :
-			offset_in_addr(&F2FS_NODE(&node_folio->page)->i);
+			offset_in_addr(&F2FS_NODE(node_folio)->i);
 }
 
 static inline __le32 *get_dnode_addr(struct inode *inode,
 					struct folio *node_folio)
 {
-	return blkaddr_in_node(F2FS_NODE(&node_folio->page)) +
+	return blkaddr_in_node(F2FS_NODE(node_folio)) +
 			get_dnode_base(inode, node_folio);
 }
 
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index c9afdce75a7f..9ea4249bfbf1 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -119,7 +119,7 @@ static void __recover_inline_status(struct inode *inode, struct folio *ifolio)
 static
 bool f2fs_enable_inode_chksum(struct f2fs_sb_info *sbi, struct folio *folio)
 {
-	struct f2fs_inode *ri = &F2FS_NODE(&folio->page)->i;
+	struct f2fs_inode *ri = &F2FS_NODE(folio)->i;
 
 	if (!f2fs_sb_has_inode_chksum(sbi))
 		return false;
@@ -136,7 +136,7 @@ bool f2fs_enable_inode_chksum(struct f2fs_sb_info *sbi, struct folio *folio)
 
 static __u32 f2fs_inode_chksum(struct f2fs_sb_info *sbi, struct folio *folio)
 {
-	struct f2fs_node *node = F2FS_NODE(&folio->page);
+	struct f2fs_node *node = F2FS_NODE(folio);
 	struct f2fs_inode *ri = &node->i;
 	__le32 ino = node->footer.ino;
 	__le32 gen = ri->i_generation;
@@ -173,7 +173,7 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct folio *folio)
 #endif
 		return true;
 
-	ri = &F2FS_NODE(&folio->page)->i;
+	ri = &F2FS_NODE(folio)->i;
 	provided = le32_to_cpu(ri->i_inode_checksum);
 	calculated = f2fs_inode_chksum(sbi, folio);
 
@@ -187,7 +187,7 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct folio *folio)
 
 void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct folio *folio)
 {
-	struct f2fs_inode *ri = &F2FS_NODE(&folio->page)->i;
+	struct f2fs_inode *ri = &F2FS_NODE(folio)->i;
 
 	if (!f2fs_enable_inode_chksum(sbi, folio))
 		return;
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 17f74e440084..fefb1549ff55 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1019,7 +1019,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
 
 	f2fs_ra_node_pages(folio, ofs, NIDS_PER_BLOCK);
 
-	rn = F2FS_NODE(&folio->page);
+	rn = F2FS_NODE(folio);
 	if (depth < 3) {
 		for (i = ofs; i < NIDS_PER_BLOCK; i++, freed++) {
 			child_nid = le32_to_cpu(rn->in.nid[i]);
@@ -2789,7 +2789,7 @@ int f2fs_recover_xattr_data(struct inode *inode, struct folio *folio)
 
 	/* 3: update and set xattr node page dirty */
 	if (folio) {
-		memcpy(F2FS_NODE(&xfolio->page), F2FS_NODE(&folio->page),
+		memcpy(F2FS_NODE(xfolio), F2FS_NODE(folio),
 				VALID_XATTR_BLOCK_SIZE);
 		folio_mark_dirty(xfolio);
 	}
@@ -2894,7 +2894,7 @@ int f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
 			if (IS_ERR(folio))
 				return PTR_ERR(folio);
 
-			rn = F2FS_NODE(&folio->page);
+			rn = F2FS_NODE(folio);
 			sum_entry->nid = rn->footer.nid;
 			sum_entry->version = 0;
 			sum_entry->ofs_in_node = 0;
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index fecbd0c4aea5..827ff00a452b 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -245,39 +245,39 @@ static inline void set_to_next_nat(struct f2fs_nm_info *nm_i, nid_t start_nid)
 
 static inline nid_t ino_of_node(const struct folio *node_folio)
 {
-	struct f2fs_node *rn = F2FS_NODE(&node_folio->page);
+	struct f2fs_node *rn = F2FS_NODE(node_folio);
 	return le32_to_cpu(rn->footer.ino);
 }
 
 static inline nid_t nid_of_node(const struct folio *node_folio)
 {
-	struct f2fs_node *rn = F2FS_NODE(&node_folio->page);
+	struct f2fs_node *rn = F2FS_NODE(node_folio);
 	return le32_to_cpu(rn->footer.nid);
 }
 
 static inline unsigned int ofs_of_node(const struct folio *node_folio)
 {
-	struct f2fs_node *rn = F2FS_NODE(&node_folio->page);
+	struct f2fs_node *rn = F2FS_NODE(node_folio);
 	unsigned flag = le32_to_cpu(rn->footer.flag);
 	return flag >> OFFSET_BIT_SHIFT;
 }
 
 static inline __u64 cpver_of_node(const struct folio *node_folio)
 {
-	struct f2fs_node *rn = F2FS_NODE(&node_folio->page);
+	struct f2fs_node *rn = F2FS_NODE(node_folio);
 	return le64_to_cpu(rn->footer.cp_ver);
 }
 
-static inline block_t next_blkaddr_of_node(struct folio *node_folio)
+static inline block_t next_blkaddr_of_node(const struct folio *node_folio)
 {
-	struct f2fs_node *rn = F2FS_NODE(&node_folio->page);
+	struct f2fs_node *rn = F2FS_NODE(node_folio);
 	return le32_to_cpu(rn->footer.next_blkaddr);
 }
 
 static inline void fill_node_footer(const struct folio *folio, nid_t nid,
 				nid_t ino, unsigned int ofs, bool reset)
 {
-	struct f2fs_node *rn = F2FS_NODE(&folio->page);
+	struct f2fs_node *rn = F2FS_NODE(folio);
 	unsigned int old_flag = 0;
 
 	if (reset)
@@ -296,15 +296,15 @@ static inline void fill_node_footer(const struct folio *folio, nid_t nid,
 static inline void copy_node_footer(const struct folio *dst,
 		const struct folio *src)
 {
-	struct f2fs_node *src_rn = F2FS_NODE(&src->page);
-	struct f2fs_node *dst_rn = F2FS_NODE(&dst->page);
+	struct f2fs_node *src_rn = F2FS_NODE(src);
+	struct f2fs_node *dst_rn = F2FS_NODE(dst);
 	memcpy(&dst_rn->footer, &src_rn->footer, sizeof(struct node_footer));
 }
 
 static inline void fill_node_footer_blkaddr(struct folio *folio, block_t blkaddr)
 {
 	struct f2fs_checkpoint *ckpt = F2FS_CKPT(F2FS_F_SB(folio));
-	struct f2fs_node *rn = F2FS_NODE(&folio->page);
+	struct f2fs_node *rn = F2FS_NODE(folio);
 	__u64 cp_ver = cur_cp_version(ckpt);
 
 	if (__is_set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG))
@@ -370,7 +370,7 @@ static inline bool IS_DNODE(const struct folio *node_folio)
 
 static inline int set_nid(struct folio *folio, int off, nid_t nid, bool i)
 {
-	struct f2fs_node *rn = F2FS_NODE(&folio->page);
+	struct f2fs_node *rn = F2FS_NODE(folio);
 
 	f2fs_folio_wait_writeback(folio, NODE, true, true);
 
@@ -383,7 +383,7 @@ static inline int set_nid(struct folio *folio, int off, nid_t nid, bool i)
 
 static inline nid_t get_nid(const struct folio *folio, int off, bool i)
 {
-	struct f2fs_node *rn = F2FS_NODE(&folio->page);
+	struct f2fs_node *rn = F2FS_NODE(folio);
 
 	if (i)
 		return le32_to_cpu(rn->i.i_nid[off - NODE_DIR1_BLOCK]);
@@ -399,7 +399,7 @@ static inline nid_t get_nid(const struct folio *folio, int off, bool i)
 
 static inline int is_node(const struct folio *folio, int type)
 {
-	struct f2fs_node *rn = F2FS_NODE(&folio->page);
+	struct f2fs_node *rn = F2FS_NODE(folio);
 	return le32_to_cpu(rn->footer.flag) & BIT(type);
 }
 
@@ -409,7 +409,7 @@ static inline int is_node(const struct folio *folio, int type)
 
 static inline void set_cold_node(const struct folio *folio, bool is_dir)
 {
-	struct f2fs_node *rn = F2FS_NODE(&folio->page);
+	struct f2fs_node *rn = F2FS_NODE(folio);
 	unsigned int flag = le32_to_cpu(rn->footer.flag);
 
 	if (is_dir)
@@ -421,7 +421,7 @@ static inline void set_cold_node(const struct folio *folio, bool is_dir)
 
 static inline void set_mark(struct folio *folio, int mark, int type)
 {
-	struct f2fs_node *rn = F2FS_NODE(&folio->page);
+	struct f2fs_node *rn = F2FS_NODE(folio);
 	unsigned int flag = le32_to_cpu(rn->footer.flag);
 	if (mark)
 		flag |= BIT(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] 65+ messages in thread

* [f2fs-dev] [PATCH 53/60] f2fs: Pass a folio to f2fs_cache_compressed_page()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (51 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 52/60] f2fs: Pass a folio to F2FS_NODE() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 54/60] f2fs: Use a folio in f2fs_encrypted_get_link() Matthew Wilcox (Oracle)
                   ` (8 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 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.
f2fs_cache_compressed_page() is not used outside compress.c so
make it static.  This requires a forward declaration (or would require
rearranging this file, but I've chosen not to do that for readability of
the diff).

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

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 24c7489b7427..5c1f47e45dab 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -793,6 +793,9 @@ void f2fs_decompress_cluster(struct decompress_io_ctx *dic, bool in_task)
 	f2fs_decompress_end_io(dic, ret, in_task);
 }
 
+static void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi,
+		struct folio *folio, nid_t ino, block_t blkaddr);
+
 /*
  * This is called when a page of a compressed cluster has been read from disk
  * (or failed to be read from disk).  It checks whether this page was the last
@@ -810,7 +813,7 @@ void f2fs_end_read_compressed_page(struct folio *folio, bool failed,
 	if (failed)
 		WRITE_ONCE(dic->failed, true);
 	else if (blkaddr && in_task)
-		f2fs_cache_compressed_page(sbi, &folio->page,
+		f2fs_cache_compressed_page(sbi, folio,
 					dic->inode->i_ino, blkaddr);
 
 	if (atomic_dec_and_test(&dic->remaining_pages))
@@ -1918,8 +1921,8 @@ void f2fs_invalidate_compress_pages_range(struct f2fs_sb_info *sbi,
 	invalidate_mapping_pages(COMPRESS_MAPPING(sbi), blkaddr, blkaddr + len - 1);
 }
 
-void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
-						nid_t ino, block_t blkaddr)
+static void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi,
+		struct folio *folio, nid_t ino, block_t blkaddr)
 {
 	struct folio *cfolio;
 	int ret;
@@ -1952,7 +1955,7 @@ void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
 
 	folio_set_f2fs_data(cfolio, ino);
 
-	memcpy(folio_address(cfolio), page_address(page), PAGE_SIZE);
+	memcpy(folio_address(cfolio), folio_address(folio), PAGE_SIZE);
 	folio_mark_uptodate(cfolio);
 	f2fs_folio_put(cfolio, true);
 }
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index c5a0d70e0a89..1650610556e3 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4525,8 +4525,6 @@ void f2fs_destroy_compress_cache(void);
 struct address_space *COMPRESS_MAPPING(struct f2fs_sb_info *sbi);
 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_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);
@@ -4581,8 +4579,6 @@ static inline int __init f2fs_init_compress_cache(void) { return 0; }
 static inline void f2fs_destroy_compress_cache(void) { }
 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_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,
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 54/60] f2fs: Use a folio in f2fs_encrypted_get_link()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (52 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 53/60] f2fs: Pass a folio to f2fs_cache_compressed_page() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 55/60] f2fs: Use F2FS_F_SB() in f2fs_read_end_io() Matthew Wilcox (Oracle)
                   ` (7 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Use a folio instead of a page when dealing with the page cache.  Removes
a hidden call to compound_head().

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

diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 07e333ee21b7..b882771e4699 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -1298,19 +1298,19 @@ static const char *f2fs_encrypted_get_link(struct dentry *dentry,
 					   struct inode *inode,
 					   struct delayed_call *done)
 {
-	struct page *page;
+	struct folio *folio;
 	const char *target;
 
 	if (!dentry)
 		return ERR_PTR(-ECHILD);
 
-	page = read_mapping_page(inode->i_mapping, 0, NULL);
-	if (IS_ERR(page))
-		return ERR_CAST(page);
+	folio = read_mapping_folio(inode->i_mapping, 0, NULL);
+	if (IS_ERR(folio))
+		return ERR_CAST(folio);
 
-	target = fscrypt_get_symlink(inode, page_address(page),
+	target = fscrypt_get_symlink(inode, folio_address(folio),
 				     inode->i_sb->s_blocksize, done);
-	put_page(page);
+	folio_put(folio);
 	return target;
 }
 
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 55/60] f2fs: Use F2FS_F_SB() in f2fs_read_end_io()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (53 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 54/60] f2fs: Use a folio in f2fs_encrypted_get_link() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 56/60] f2fs: Remove clear_page_private_all() Matthew Wilcox (Oracle)
                   ` (6 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Get the folio from the bio instead of the page.

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 116482adf591..942aaf10b78b 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -278,7 +278,7 @@ static void f2fs_post_read_work(struct work_struct *work)
 
 static void f2fs_read_end_io(struct bio *bio)
 {
-	struct f2fs_sb_info *sbi = F2FS_P_SB(bio_first_page_all(bio));
+	struct f2fs_sb_info *sbi = F2FS_F_SB(bio_first_folio_all(bio));
 	struct bio_post_read_ctx *ctx;
 	bool intask = in_task();
 
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 56/60] f2fs: Remove clear_page_private_all()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (54 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 55/60] f2fs: Use F2FS_F_SB() in f2fs_read_end_io() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 57/60] f2fs: Remove use of page from f2fs_write_single_data_page() Matthew Wilcox (Oracle)
                   ` (5 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All callers can simply call folio_detach_private().  This was the
only way that clear_page_private_data() could be called, so remove
that too.

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

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 942aaf10b78b..72565841a16c 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -3728,7 +3728,7 @@ void f2fs_invalidate_folio(struct folio *folio, size_t offset, size_t length)
 			f2fs_remove_dirty_inode(inode);
 		}
 	}
-	clear_page_private_all(&folio->page);
+	folio_detach_private(folio);
 }
 
 bool f2fs_release_folio(struct folio *folio, gfp_t wait)
@@ -3737,7 +3737,7 @@ bool f2fs_release_folio(struct folio *folio, gfp_t wait)
 	if (folio_test_dirty(folio))
 		return false;
 
-	clear_page_private_all(&folio->page);
+	folio_detach_private(folio);
 	return true;
 }
 
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 888dca7e82ac..fffd7749d6d1 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -897,7 +897,7 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct folio *folio,
 		f2fs_clear_page_cache_dirty_tag(folio);
 		folio_clear_dirty_for_io(folio);
 		folio_clear_uptodate(folio);
-		clear_page_private_all(&folio->page);
+		folio_detach_private(folio);
 
 		inode_dec_dirty_pages(dir);
 		f2fs_remove_dirty_inode(dir);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 1650610556e3..1ea8ecffec83 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2547,24 +2547,6 @@ static inline void folio_set_f2fs_data(struct folio *folio, unsigned long data)
 		folio->private = (void *)((unsigned long)folio->private | data);
 }
 
-static inline void clear_page_private_data(struct page *page)
-{
-	page_private(page) &= GENMASK(PAGE_PRIVATE_MAX - 1, 0);
-	if (page_private(page) == BIT(PAGE_PRIVATE_NOT_POINTER))
-		detach_page_private(page);
-}
-
-static inline void clear_page_private_all(struct page *page)
-{
-	clear_page_private_data(page);
-	clear_page_private_reference(page);
-	clear_page_private_gcing(page);
-	clear_page_private_inline(page);
-	clear_page_private_atomic(page);
-
-	f2fs_bug_on(F2FS_P_SB(page), page_private(page));
-}
-
 static inline void dec_valid_block_count(struct f2fs_sb_info *sbi,
 						struct inode *inode,
 						block_t count)
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 57/60] f2fs: Remove use of page from f2fs_write_single_data_page()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (55 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 56/60] f2fs: Remove clear_page_private_all() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 58/60] f2fs: Pass a folio to f2fs_submit_merged_write_cond() Matthew Wilcox (Oracle)
                   ` (4 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Both remaining uses of page now have a folio equivalent.

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

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 72565841a16c..18c5b619f48e 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -2768,7 +2768,6 @@ int f2fs_write_single_data_page(struct folio *folio, int *submitted,
 				bool allow_balance)
 {
 	struct inode *inode = folio->mapping->host;
-	struct page *page = folio_page(folio, 0);
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	loff_t i_size = i_size_read(inode);
 	const pgoff_t end_index = ((unsigned long long)i_size)
@@ -2785,7 +2784,7 @@ int f2fs_write_single_data_page(struct folio *folio, int *submitted,
 		.op = REQ_OP_WRITE,
 		.op_flags = wbc_to_write_flags(wbc),
 		.old_blkaddr = NULL_ADDR,
-		.page = page,
+		.folio = folio,
 		.encrypted_page = NULL,
 		.submitted = 0,
 		.compr_blocks = compr_blocks,
@@ -2887,7 +2886,7 @@ int f2fs_write_single_data_page(struct folio *folio, int *submitted,
 	inode_dec_dirty_pages(inode);
 	if (err) {
 		folio_clear_uptodate(folio);
-		clear_page_private_gcing(page);
+		folio_clear_f2fs_gcing(folio);
 	}
 	folio_unlock(folio);
 	if (!S_ISDIR(inode->i_mode) && !IS_NOQUOTA(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] 65+ messages in thread

* [f2fs-dev] [PATCH 58/60] f2fs: Pass a folio to f2fs_submit_merged_write_cond()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (56 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 57/60] f2fs: Remove use of page from f2fs_write_single_data_page() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 59/60] f2fs: Pass a folio to __has_merged_page() Matthew Wilcox (Oracle)
                   ` (3 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

Most callers pass NULL, and the one that passes a page already has a
folio.  Also convert __submit_merged_write_cond() to take a folio.

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 18c5b619f48e..b82d8784248e 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -638,7 +638,7 @@ static void __f2fs_submit_merged_write(struct f2fs_sb_info *sbi,
 }
 
 static void __submit_merged_write_cond(struct f2fs_sb_info *sbi,
-				struct inode *inode, struct page *page,
+				struct inode *inode, struct folio *folio,
 				nid_t ino, enum page_type type, bool force)
 {
 	enum temp_type temp;
@@ -650,7 +650,7 @@ static void __submit_merged_write_cond(struct f2fs_sb_info *sbi,
 			struct f2fs_bio_info *io = sbi->write_io[btype] + temp;
 
 			f2fs_down_read(&io->io_rwsem);
-			ret = __has_merged_page(io->bio, inode, page, ino);
+			ret = __has_merged_page(io->bio, inode, &folio->page, ino);
 			f2fs_up_read(&io->io_rwsem);
 		}
 		if (ret)
@@ -668,10 +668,10 @@ void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type)
 }
 
 void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
-				struct inode *inode, struct page *page,
+				struct inode *inode, struct folio *folio,
 				nid_t ino, enum page_type type)
 {
-	__submit_merged_write_cond(sbi, inode, page, ino, type, false);
+	__submit_merged_write_cond(sbi, inode, folio, ino, type, false);
 }
 
 void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi)
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 1ea8ecffec83..3ae1f15205c5 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3982,7 +3982,7 @@ void f2fs_submit_read_bio(struct f2fs_sb_info *sbi, struct bio *bio,
 int f2fs_init_write_merge_io(struct f2fs_sb_info *sbi);
 void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type);
 void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
-				struct inode *inode, struct page *page,
+				struct inode *inode, struct folio *folio,
 				nid_t ino, enum page_type type);
 void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
 					struct bio **bio, struct folio *folio);
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 667611c86f8c..ab64c262dcf6 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -4197,7 +4197,7 @@ void f2fs_folio_wait_writeback(struct folio *folio, enum page_type type,
 		struct f2fs_sb_info *sbi = F2FS_F_SB(folio);
 
 		/* submit cached LFS IO */
-		f2fs_submit_merged_write_cond(sbi, NULL, &folio->page, 0, type);
+		f2fs_submit_merged_write_cond(sbi, NULL, folio, 0, type);
 		/* submit cached IPU IO */
 		f2fs_submit_merged_ipu_write(sbi, NULL, folio);
 		if (ordered) {
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 59/60] f2fs: Pass a folio to __has_merged_page()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (57 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 58/60] f2fs: Pass a folio to f2fs_submit_merged_write_cond() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 60/60] f2fs: Remove F2FS_P_SB() Matthew Wilcox (Oracle)
                   ` (2 subsequent siblings)
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

All three callers have a folio so pass it in.

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 b82d8784248e..56ea8dfc43a7 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -543,14 +543,14 @@ 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 folio *folio, nid_t ino)
 {
 	struct folio_iter fi;
 
 	if (!bio)
 		return false;
 
-	if (!inode && !page && !ino)
+	if (!inode && !folio && !ino)
 		return true;
 
 	bio_for_each_folio_all(fi, bio) {
@@ -569,7 +569,7 @@ static bool __has_merged_page(struct bio *bio, struct inode *inode,
 
 		if (inode && inode == target->mapping->host)
 			return true;
-		if (page && page == &target->page)
+		if (folio && folio == target)
 			return true;
 		if (ino && ino == ino_of_node(target))
 			return true;
@@ -650,7 +650,7 @@ static void __submit_merged_write_cond(struct f2fs_sb_info *sbi,
 			struct f2fs_bio_info *io = sbi->write_io[btype] + temp;
 
 			f2fs_down_read(&io->io_rwsem);
-			ret = __has_merged_page(io->bio, inode, &folio->page, ino);
+			ret = __has_merged_page(io->bio, inode, folio, ino);
 			f2fs_up_read(&io->io_rwsem);
 		}
 		if (ret)
@@ -845,7 +845,7 @@ void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
 				found = (target == be->bio);
 			else
 				found = __has_merged_page(be->bio, NULL,
-							&folio->page, 0);
+							folio, 0);
 			if (found)
 				break;
 		}
@@ -862,7 +862,7 @@ void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
 				found = (target == be->bio);
 			else
 				found = __has_merged_page(be->bio, NULL,
-							&folio->page, 0);
+							folio, 0);
 			if (found) {
 				target = be->bio;
 				del_bio_entry(be);
-- 
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] 65+ messages in thread

* [f2fs-dev] [PATCH 60/60] f2fs: Remove F2FS_P_SB()
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (58 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 59/60] f2fs: Pass a folio to __has_merged_page() Matthew Wilcox (Oracle)
@ 2025-07-08 17:03 ` Matthew Wilcox (Oracle)
  2025-07-11 16:20 ` [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 patchwork-bot+f2fs--- via Linux-f2fs-devel
  2025-07-22  7:03 ` Chao Yu via Linux-f2fs-devel
  61 siblings, 0 replies; 65+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-07-08 17:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: Matthew Wilcox (Oracle), linux-f2fs-devel

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

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

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 3ae1f15205c5..251fe1f7f57d 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2026,11 +2026,6 @@ static inline struct f2fs_sb_info *F2FS_F_SB(const struct folio *folio)
 	return F2FS_M_SB(folio->mapping);
 }
 
-static inline struct f2fs_sb_info *F2FS_P_SB(struct page *page)
-{
-	return F2FS_F_SB(page_folio(page));
-}
-
 static inline struct f2fs_super_block *F2FS_RAW_SUPER(struct f2fs_sb_info *sbi)
 {
 	return (struct f2fs_super_block *)(sbi->raw_super);
-- 
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] 65+ messages in thread

* Re: [f2fs-dev] [PATCH 11/60] f2fs: Pass a folio to nid_of_node()
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 11/60] f2fs: Pass a folio to nid_of_node() Matthew Wilcox (Oracle)
@ 2025-07-09 19:56   ` Jaegeuk Kim via Linux-f2fs-devel
  0 siblings, 0 replies; 65+ messages in thread
From: Jaegeuk Kim via Linux-f2fs-devel @ 2025-07-09 19:56 UTC (permalink / raw)
  To: Matthew Wilcox (Oracle); +Cc: linux-f2fs-devel

Queued with this for testing.

--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -767,7 +767,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 out:
        f2fs_notice(sbi, "recover_data: ino = %lx, nid = %x (i_size: %s), "
                    "range (%u, %u), recovered = %d, err = %d",
-                   inode->i_ino, nid_of_node(&folio->page),
+                   inode->i_ino, nid_of_node(folio),
                    file_keep_isize(inode) ? "keep" : "recover",
                    start, end, recovered, err);
        return err;


On 07/08, Matthew Wilcox (Oracle) wrote:
> All callers have a folio so pass it in.  Also make the argument const
> as the function does not modify it.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
>  fs/f2fs/data.c  | 2 +-
>  fs/f2fs/inode.c | 4 ++--
>  fs/f2fs/node.c  | 6 +++---
>  fs/f2fs/node.h  | 4 ++--
>  4 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index b023d15b4555..5fc3d985c4e3 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -355,7 +355,7 @@ static void f2fs_write_end_io(struct bio *bio)
>  		}
>  
>  		f2fs_bug_on(sbi, is_node_folio(folio) &&
> -				folio->index != nid_of_node(&folio->page));
> +				folio->index != nid_of_node(folio));
>  
>  		dec_page_count(sbi, type);
>  		if (f2fs_in_warm_node_list(sbi, folio))
> diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
> index eedc56a3561b..db4ccde3737a 100644
> --- a/fs/f2fs/inode.c
> +++ b/fs/f2fs/inode.c
> @@ -280,10 +280,10 @@ static bool sanity_check_inode(struct inode *inode, struct folio *node_folio)
>  		return false;
>  	}
>  
> -	if (ino_of_node(node_folio) != nid_of_node(&node_folio->page)) {
> +	if (ino_of_node(node_folio) != nid_of_node(node_folio)) {
>  		f2fs_warn(sbi, "%s: corrupted inode footer i_ino=%lx, ino,nid: [%u, %u] run fsck to fix.",
>  			  __func__, inode->i_ino,
> -			  ino_of_node(node_folio), nid_of_node(&node_folio->page));
> +			  ino_of_node(node_folio), nid_of_node(node_folio));
>  		return false;
>  	}
>  
> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
> index fabcb3fa47cd..26d3bc7597d9 100644
> --- a/fs/f2fs/node.c
> +++ b/fs/f2fs/node.c
> @@ -1477,14 +1477,14 @@ static int sanity_check_node_footer(struct f2fs_sb_info *sbi,
>  {
>  	struct page *page = &folio->page;
>  
> -	if (unlikely(nid != nid_of_node(page) ||
> +	if (unlikely(nid != nid_of_node(folio) ||
>  		(ntype == NODE_TYPE_INODE && !IS_INODE(page)) ||
>  		(ntype == NODE_TYPE_XATTR &&
>  		!f2fs_has_xattr_block(ofs_of_node(page))) ||
>  		time_to_inject(sbi, FAULT_INCONSISTENT_FOOTER))) {
>  		f2fs_warn(sbi, "inconsistent node block, node_type:%d, nid:%lu, "
>  			  "node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]",
> -			  ntype, nid, nid_of_node(page), ino_of_node(folio),
> +			  ntype, nid, nid_of_node(folio), ino_of_node(folio),
>  			  ofs_of_node(page), cpver_of_node(page),
>  			  next_blkaddr_of_node(folio));
>  		set_sbi_flag(sbi, SBI_NEED_FSCK);
> @@ -1706,7 +1706,7 @@ static bool __write_node_folio(struct folio *folio, bool atomic, bool *submitted
>  		goto redirty_out;
>  
>  	/* get old block addr of this node page */
> -	nid = nid_of_node(&folio->page);
> +	nid = nid_of_node(folio);
>  	f2fs_bug_on(sbi, folio->index != nid);
>  
>  	if (f2fs_get_node_info(sbi, nid, &ni, !do_balance))
> diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
> index 6c4fc3449a68..c03cc1fdd136 100644
> --- a/fs/f2fs/node.h
> +++ b/fs/f2fs/node.h
> @@ -249,9 +249,9 @@ static inline nid_t ino_of_node(const struct folio *node_folio)
>  	return le32_to_cpu(rn->footer.ino);
>  }
>  
> -static inline nid_t nid_of_node(struct page *node_page)
> +static inline nid_t nid_of_node(const 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.nid);
>  }
>  
> -- 
> 2.47.2
> 
> 
> 
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel


_______________________________________________
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] 65+ messages in thread

* Re: [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (59 preceding siblings ...)
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 60/60] f2fs: Remove F2FS_P_SB() Matthew Wilcox (Oracle)
@ 2025-07-11 16:20 ` patchwork-bot+f2fs--- via Linux-f2fs-devel
  2025-07-22  7:03 ` Chao Yu via Linux-f2fs-devel
  61 siblings, 0 replies; 65+ messages in thread
From: patchwork-bot+f2fs--- via Linux-f2fs-devel @ 2025-07-11 16:20 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 Tue,  8 Jul 2025 18:02:57 +0100 you wrote:
> Some more folio conversions for f2fs.  Again, I have checked these patches
> build, but otherwise they are untested.  There are three inline functions
> in fscrypt that I change to take a const struct folio pointer instead
> of a mutable pointer that I don't think should cause any conflicts.
> 
> Matthew Wilcox (Oracle) (60):
>   f2fs: Pass a folio to recover_dentry()
>   f2fs: Pass a folio to recover_inode()
>   f2fs: Pass a folio to recover_quota_data()
>   f2fs: Pass a folio to f2fs_recover_inode_page()
>   f2fs: Pass a folio to sanity_check_extent_cache()
>   f2fs: Pass a folio to sanity_check_inode()
>   f2fs: Pass a folio to f2fs_sanity_check_inline_data()
>   f2fs: Pass a folio to inode_has_blocks()
>   f2fs: Pass a folio to F2FS_INODE()
>   f2fs: Pass a folio to ino_of_node()
>   f2fs: Pass a folio to nid_of_node()
>   f2fs: Pass a folio to is_recoverable_dnode()
>   f2fs: Pass a folio to set_dentry_mark()
>   f2fs: Pass a folio to set_fsync_mark()
>   f2fs: Pass a folio to set_mark()
>   f2fs: Pass a folio to f2fs_allocate_data_block()
>   f2fs: Pass a folio to f2fs_inode_chksum_set()
>   f2fs: Pass a folio to f2fs_enable_inode_chksum()
>   f2fs: Pass a folio to f2fs_inode_chksum()
>   f2fs: Pass a folio to fill_node_footer_blkaddr()
>   f2fs: Pass a folio to get_nid()
>   f2fs: Pass a folio to set_cold_node()
>   f2fs: Pass folios to copy_node_footer()
>   f2fs: Pass a folio to fill_node_footer()
>   f2fs: Pass a folio to cpver_of_node()
>   f2fs: Pass a folio to f2fs_recover_xattr_data()
>   f2fs: Pass a folio to is_fsync_dnode()
>   f2fs: Pass a folio to is_dent_dnode()
>   f2fs: Add fio->folio
>   f2fs: Use folio_unlock() in f2fs_write_compressed_pages()
>   f2fs: Pass a folio to is_cold_node()
>   f2fs: Pass a folio to is_node()
>   f2fs: Pass a folio to IS_DNODE()
>   f2fs: Pass a folio to ofs_of_node()
>   f2fs: Pass a folio to get_dnode_base()
>   f2fs: Pass a folio to ADDRS_PER_PAGE()
>   f2fs: Pass a folio to IS_INODE()
>   f2fs: Add folio counterparts to page_private_flags functions
>   f2fs: Use a folio in f2fs_is_cp_guaranteed()
>   f2fs: Convert set_page_private_data() to folio_set_f2fs_data()
>   f2fs: Convert get_page_private_data() to folio_get_f2fs_data()
>   f2fs: Pass a folio to f2fs_compress_write_end_io()
>   f2fs: Use a folio in f2fs_merge_page_bio()
>   f2fs: Use a bio in f2fs_submit_page_write()
>   f2fs: Pass a folio to WB_DATA_TYPE() and f2fs_is_cp_guaranteed()
>   f2fs: Use a folio iterator in f2fs_handle_step_decompress()
>   f2fs: Pass a folio to f2fs_end_read_compressed_page()
>   f2fs: Use a folio iterator in f2fs_verify_bio()
>   f2fs: Pass a folio to f2fs_is_compressed_page()
>   f2fs: Convert get_next_nat_page() to get_next_nat_folio()
>   f2fs: Pass the nat_blk to __update_nat_bits()
>   f2fs: Pass a folio to F2FS_NODE()
>   f2fs: Pass a folio to f2fs_cache_compressed_page()
>   f2fs: Use a folio in f2fs_encrypted_get_link()
>   f2fs: Use F2FS_F_SB() in f2fs_read_end_io()
>   f2fs: Remove clear_page_private_all()
>   f2fs: Remove use of page from f2fs_write_single_data_page()
>   f2fs: Pass a folio to f2fs_submit_merged_write_cond()
>   f2fs: Pass a folio to __has_merged_page()
>   f2fs: Remove F2FS_P_SB()
> 
> [...]

Here is the summary with links:
  - [f2fs-dev,01/60] f2fs: Pass a folio to recover_dentry()
    (no matching commit)
  - [f2fs-dev,02/60] f2fs: Pass a folio to recover_inode()
    https://git.kernel.org/jaegeuk/f2fs/c/c038532a477a
  - [f2fs-dev,03/60] f2fs: Pass a folio to recover_quota_data()
    https://git.kernel.org/jaegeuk/f2fs/c/a1bde8f5df6b
  - [f2fs-dev,04/60] f2fs: Pass a folio to f2fs_recover_inode_page()
    https://git.kernel.org/jaegeuk/f2fs/c/e2f2fb439fe6
  - [f2fs-dev,05/60] f2fs: Pass a folio to sanity_check_extent_cache()
    https://git.kernel.org/jaegeuk/f2fs/c/f9119a6af7d6
  - [f2fs-dev,06/60] f2fs: Pass a folio to sanity_check_inode()
    https://git.kernel.org/jaegeuk/f2fs/c/7a9434457dbc
  - [f2fs-dev,07/60] f2fs: Pass a folio to f2fs_sanity_check_inline_data()
    https://git.kernel.org/jaegeuk/f2fs/c/169ba46764b8
  - [f2fs-dev,08/60] f2fs: Pass a folio to inode_has_blocks()
    https://git.kernel.org/jaegeuk/f2fs/c/0215fea1f4cd
  - [f2fs-dev,09/60] f2fs: Pass a folio to F2FS_INODE()
    (no matching commit)
  - [f2fs-dev,10/60] f2fs: Pass a folio to ino_of_node()
    (no matching commit)
  - [f2fs-dev,11/60] f2fs: Pass a folio to nid_of_node()
    (no matching commit)
  - [f2fs-dev,12/60] f2fs: Pass a folio to is_recoverable_dnode()
    https://git.kernel.org/jaegeuk/f2fs/c/b4940c4efbde
  - [f2fs-dev,13/60] f2fs: Pass a folio to set_dentry_mark()
    https://git.kernel.org/jaegeuk/f2fs/c/a99a7e725177
  - [f2fs-dev,14/60] f2fs: Pass a folio to set_fsync_mark()
    https://git.kernel.org/jaegeuk/f2fs/c/466e5479271d
  - [f2fs-dev,15/60] f2fs: Pass a folio to set_mark()
    https://git.kernel.org/jaegeuk/f2fs/c/1a3192164fbf
  - [f2fs-dev,16/60] f2fs: Pass a folio to f2fs_allocate_data_block()
    https://git.kernel.org/jaegeuk/f2fs/c/12a91837ab4b
  - [f2fs-dev,17/60] f2fs: Pass a folio to f2fs_inode_chksum_set()
    https://git.kernel.org/jaegeuk/f2fs/c/a47fe3490722
  - [f2fs-dev,18/60] f2fs: Pass a folio to f2fs_enable_inode_chksum()
    https://git.kernel.org/jaegeuk/f2fs/c/7a36693eecca
  - [f2fs-dev,19/60] f2fs: Pass a folio to f2fs_inode_chksum()
    https://git.kernel.org/jaegeuk/f2fs/c/28a1173b254c
  - [f2fs-dev,20/60] f2fs: Pass a folio to fill_node_footer_blkaddr()
    https://git.kernel.org/jaegeuk/f2fs/c/5e2c8ee61c4c
  - [f2fs-dev,21/60] f2fs: Pass a folio to get_nid()
    https://git.kernel.org/jaegeuk/f2fs/c/5477ebc936ba
  - [f2fs-dev,22/60] f2fs: Pass a folio to set_cold_node()
    https://git.kernel.org/jaegeuk/f2fs/c/d1462e1d6da6
  - [f2fs-dev,23/60] f2fs: Pass folios to copy_node_footer()
    https://git.kernel.org/jaegeuk/f2fs/c/911587da9698
  - [f2fs-dev,24/60] f2fs: Pass a folio to fill_node_footer()
    https://git.kernel.org/jaegeuk/f2fs/c/298185ddb37e
  - [f2fs-dev,25/60] f2fs: Pass a folio to cpver_of_node()
    https://git.kernel.org/jaegeuk/f2fs/c/4ff4b2ec087b
  - [f2fs-dev,26/60] f2fs: Pass a folio to f2fs_recover_xattr_data()
    https://git.kernel.org/jaegeuk/f2fs/c/e2080edee335
  - [f2fs-dev,27/60] f2fs: Pass a folio to is_fsync_dnode()
    https://git.kernel.org/jaegeuk/f2fs/c/94e3a713c77d
  - [f2fs-dev,28/60] f2fs: Pass a folio to is_dent_dnode()
    https://git.kernel.org/jaegeuk/f2fs/c/8e8b1174412d
  - [f2fs-dev,29/60] f2fs: Add fio->folio
    https://git.kernel.org/jaegeuk/f2fs/c/e6d648da79ac
  - [f2fs-dev,30/60] f2fs: Use folio_unlock() in f2fs_write_compressed_pages()
    https://git.kernel.org/jaegeuk/f2fs/c/9298fff61df3
  - [f2fs-dev,31/60] f2fs: Pass a folio to is_cold_node()
    https://git.kernel.org/jaegeuk/f2fs/c/48129aecd3f2
  - [f2fs-dev,32/60] f2fs: Pass a folio to is_node()
    https://git.kernel.org/jaegeuk/f2fs/c/14a59be90712
  - [f2fs-dev,33/60] f2fs: Pass a folio to IS_DNODE()
    https://git.kernel.org/jaegeuk/f2fs/c/11eab03afb9f
  - [f2fs-dev,34/60] f2fs: Pass a folio to ofs_of_node()
    https://git.kernel.org/jaegeuk/f2fs/c/7abab5d560b5
  - [f2fs-dev,35/60] f2fs: Pass a folio to get_dnode_base()
    https://git.kernel.org/jaegeuk/f2fs/c/60a03d2970d2
  - [f2fs-dev,36/60] f2fs: Pass a folio to ADDRS_PER_PAGE()
    https://git.kernel.org/jaegeuk/f2fs/c/a6023aa55a58
  - [f2fs-dev,37/60] f2fs: Pass a folio to IS_INODE()
    https://git.kernel.org/jaegeuk/f2fs/c/bd77898e0107
  - [f2fs-dev,38/60] f2fs: Add folio counterparts to page_private_flags functions
    https://git.kernel.org/jaegeuk/f2fs/c/fbb435125cca
  - [f2fs-dev,39/60] f2fs: Use a folio in f2fs_is_cp_guaranteed()
    (no matching commit)
  - [f2fs-dev,40/60] f2fs: Convert set_page_private_data() to folio_set_f2fs_data()
    https://git.kernel.org/jaegeuk/f2fs/c/916bb5e96244
  - [f2fs-dev,41/60] f2fs: Convert get_page_private_data() to folio_get_f2fs_data()
    https://git.kernel.org/jaegeuk/f2fs/c/6fc43b4e972f
  - [f2fs-dev,42/60] f2fs: Pass a folio to f2fs_compress_write_end_io()
    https://git.kernel.org/jaegeuk/f2fs/c/091d80074ab3
  - [f2fs-dev,43/60] f2fs: Use a folio in f2fs_merge_page_bio()
    https://git.kernel.org/jaegeuk/f2fs/c/a8c4d9d6fdfb
  - [f2fs-dev,44/60] f2fs: Use a bio in f2fs_submit_page_write()
    https://git.kernel.org/jaegeuk/f2fs/c/3c488b757c16
  - [f2fs-dev,45/60] f2fs: Pass a folio to WB_DATA_TYPE() and f2fs_is_cp_guaranteed()
    https://git.kernel.org/jaegeuk/f2fs/c/28e953cb10e1
  - [f2fs-dev,46/60] f2fs: Use a folio iterator in f2fs_handle_step_decompress()
    https://git.kernel.org/jaegeuk/f2fs/c/7f73ce73878f
  - [f2fs-dev,47/60] f2fs: Pass a folio to f2fs_end_read_compressed_page()
    https://git.kernel.org/jaegeuk/f2fs/c/7c5a2227a140
  - [f2fs-dev,48/60] f2fs: Use a folio iterator in f2fs_verify_bio()
    https://git.kernel.org/jaegeuk/f2fs/c/aca3b805617a
  - [f2fs-dev,49/60] f2fs: Pass a folio to f2fs_is_compressed_page()
    https://git.kernel.org/jaegeuk/f2fs/c/ce45b989aeb9
  - [f2fs-dev,50/60] f2fs: Convert get_next_nat_page() to get_next_nat_folio()
    https://git.kernel.org/jaegeuk/f2fs/c/0b3ae6d0b81d
  - [f2fs-dev,51/60] f2fs: Pass the nat_blk to __update_nat_bits()
    https://git.kernel.org/jaegeuk/f2fs/c/ad5f8969ac99
  - [f2fs-dev,52/60] f2fs: Pass a folio to F2FS_NODE()
    https://git.kernel.org/jaegeuk/f2fs/c/db80d3671da9
  - [f2fs-dev,53/60] f2fs: Pass a folio to f2fs_cache_compressed_page()
    https://git.kernel.org/jaegeuk/f2fs/c/73c677af3f97
  - [f2fs-dev,54/60] f2fs: Use a folio in f2fs_encrypted_get_link()
    https://git.kernel.org/jaegeuk/f2fs/c/8002c3e20bbb
  - [f2fs-dev,55/60] f2fs: Use F2FS_F_SB() in f2fs_read_end_io()
    https://git.kernel.org/jaegeuk/f2fs/c/ec555507df88
  - [f2fs-dev,56/60] f2fs: Remove clear_page_private_all()
    https://git.kernel.org/jaegeuk/f2fs/c/c1d6bee2e291
  - [f2fs-dev,57/60] f2fs: Remove use of page from f2fs_write_single_data_page()
    https://git.kernel.org/jaegeuk/f2fs/c/daedff70249f
  - [f2fs-dev,58/60] f2fs: Pass a folio to f2fs_submit_merged_write_cond()
    https://git.kernel.org/jaegeuk/f2fs/c/bc2b45b9e752
  - [f2fs-dev,59/60] f2fs: Pass a folio to __has_merged_page()
    https://git.kernel.org/jaegeuk/f2fs/c/16b7cb4d2354
  - [f2fs-dev,60/60] f2fs: Remove F2FS_P_SB()
    https://git.kernel.org/jaegeuk/f2fs/c/9a8ab51aecda

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] 65+ messages in thread

* Re: [f2fs-dev] [PATCH 49/60] f2fs: Pass a folio to f2fs_is_compressed_page()
  2025-07-08 17:03 ` [f2fs-dev] [PATCH 49/60] f2fs: Pass a folio to f2fs_is_compressed_page() Matthew Wilcox (Oracle)
@ 2025-07-22  6:54   ` Chao Yu via Linux-f2fs-devel
  0 siblings, 0 replies; 65+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-07-22  6:54 UTC (permalink / raw)
  To: Matthew Wilcox (Oracle), Jaegeuk Kim; +Cc: linux-f2fs-devel

On 7/9/25 01:03, Matthew Wilcox (Oracle) wrote:
> All callers now have a folio so pass it in.  Also remove the test for
> the private flag; it is redundant with checking folio->private for being
> NULL.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
>  fs/f2fs/compress.c | 14 ++++++--------
>  fs/f2fs/data.c     | 10 +++++-----
>  fs/f2fs/f2fs.h     |  4 ++--
>  3 files changed, 13 insertions(+), 15 deletions(-)
> 
> diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
> index 5847d22a5833..24c7489b7427 100644
> --- a/fs/f2fs/compress.c
> +++ b/fs/f2fs/compress.c
> @@ -71,17 +71,15 @@ static pgoff_t start_idx_of_cluster(struct compress_ctx *cc)
>  	return cc->cluster_idx << cc->log_cluster_size;
>  }
>  
> -bool f2fs_is_compressed_page(struct page *page)
> +bool f2fs_is_compressed_page(struct folio *folio)
>  {
> -	if (!PagePrivate(page))
> +	if (!folio->private)
>  		return false;
> -	if (!page_private(page))
> -		return false;
> -	if (page_private_nonpointer(page))
> +	if (folio_test_f2fs_nonpointer(folio))

Hi Matthew,

Is this indicate if folio->private is non-zero, Private flag must have been
set in the folio?

Something like below function, if folio->private is true, we don't need to
set Private flag again after update folio->private, since it assumes it
should have been set previously? Is my understanding correct?

+static inline void folio_set_f2fs_##name(struct folio *folio)		\
+{									\
+	unsigned long v = (1UL << PAGE_PRIVATE_NOT_POINTER) |		\
+			     (1UL << PAGE_PRIVATE_##flagname);		\
+	if (!folio->private)						\
+		folio_attach_private(folio, (void *)v);			\
+	else {								\
+		v |= (unsigned long)folio->private;			\
+		folio->private = (void *)v;				\
+	}								\
+}									\

Thanks,

>  		return false;
>  
> -	f2fs_bug_on(F2FS_P_SB(page),
> -		*((u32 *)page_private(page)) != F2FS_COMPRESSED_PAGE_MAGIC);
> +	f2fs_bug_on(F2FS_F_SB(folio),
> +		*((u32 *)folio->private) != F2FS_COMPRESSED_PAGE_MAGIC);
>  	return true;
>  }
>  
> @@ -1478,7 +1476,7 @@ void f2fs_compress_write_end_io(struct bio *bio, struct folio *folio)
>  	struct f2fs_sb_info *sbi = bio->bi_private;
>  	struct compress_io_ctx *cic = folio->private;
>  	enum count_type type = WB_DATA_TYPE(folio,
> -				f2fs_is_compressed_page(page));
> +				f2fs_is_compressed_page(folio));
>  	int i;
>  
>  	if (unlikely(bio->bi_status != BLK_STS_OK))
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index cf2c146944bf..116482adf591 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -142,7 +142,7 @@ static void f2fs_finish_read_bio(struct bio *bio, bool in_task)
>  	bio_for_each_folio_all(fi, bio) {
>  		struct folio *folio = fi.folio;
>  
> -		if (f2fs_is_compressed_page(&folio->page)) {
> +		if (f2fs_is_compressed_page(folio)) {
>  			if (ctx && !ctx->decompression_attempted)
>  				f2fs_end_read_compressed_page(folio, true, 0,
>  							in_task);
> @@ -186,7 +186,7 @@ static void f2fs_verify_bio(struct work_struct *work)
>  		bio_for_each_folio_all(fi, bio) {
>  			struct folio *folio = fi.folio;
>  
> -			if (!f2fs_is_compressed_page(&folio->page) &&
> +			if (!f2fs_is_compressed_page(folio) &&
>  			    !fsverity_verify_page(&folio->page)) {
>  				bio->bi_status = BLK_STS_IOERR;
>  				break;
> @@ -239,7 +239,7 @@ static void f2fs_handle_step_decompress(struct bio_post_read_ctx *ctx,
>  	bio_for_each_folio_all(fi, ctx->bio) {
>  		struct folio *folio = fi.folio;
>  
> -		if (f2fs_is_compressed_page(&folio->page))
> +		if (f2fs_is_compressed_page(folio))
>  			f2fs_end_read_compressed_page(folio, false, blkaddr,
>  						      in_task);
>  		else
> @@ -337,7 +337,7 @@ static void f2fs_write_end_io(struct bio *bio)
>  		}
>  
>  #ifdef CONFIG_F2FS_FS_COMPRESSION
> -		if (f2fs_is_compressed_page(&folio->page)) {
> +		if (f2fs_is_compressed_page(folio)) {
>  			f2fs_compress_write_end_io(bio, folio);
>  			continue;
>  		}
> @@ -561,7 +561,7 @@ static bool __has_merged_page(struct bio *bio, struct inode *inode,
>  			if (IS_ERR(target))
>  				continue;
>  		}
> -		if (f2fs_is_compressed_page(&target->page)) {
> +		if (f2fs_is_compressed_page(target)) {
>  			target = f2fs_compress_control_folio(target);
>  			if (IS_ERR(target))
>  				continue;
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 68535b917a3a..48b15e44a41c 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -4474,7 +4474,7 @@ enum cluster_check_type {
>  	CLUSTER_COMPR_BLKS, /* return # of compressed blocks in a cluster */
>  	CLUSTER_RAW_BLKS    /* return # of raw blocks in a cluster */
>  };
> -bool f2fs_is_compressed_page(struct page *page);
> +bool f2fs_is_compressed_page(struct folio *folio);
>  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);
> @@ -4543,7 +4543,7 @@ void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino);
>  		sbi->compr_saved_block += diff;				\
>  	} while (0)
>  #else
> -static inline bool f2fs_is_compressed_page(struct page *page) { return false; }
> +static inline bool f2fs_is_compressed_page(struct folio *folio) { return false; }
>  static inline bool f2fs_is_compress_backend_ready(struct inode *inode)
>  {
>  	if (!f2fs_compressed_file(inode))



_______________________________________________
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] 65+ messages in thread

* Re: [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17
  2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
                   ` (60 preceding siblings ...)
  2025-07-11 16:20 ` [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 patchwork-bot+f2fs--- via Linux-f2fs-devel
@ 2025-07-22  7:03 ` Chao Yu via Linux-f2fs-devel
  61 siblings, 0 replies; 65+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-07-22  7:03 UTC (permalink / raw)
  To: Jaegeuk Kim, Matthew Wilcox (Oracle); +Cc: linux-f2fs-devel

Hi Jaegeuk,

On 7/9/25 01:02, Matthew Wilcox (Oracle) wrote:
> Some more folio conversions for f2fs.  Again, I have checked these patches
> build, but otherwise they are untested.  There are three inline functions
> in fscrypt that I change to take a const struct folio pointer instead
> of a mutable pointer that I don't think should cause any conflicts.
> 
> Matthew Wilcox (Oracle) (60):
>   f2fs: Pass a folio to recover_dentry()
>   f2fs: Pass a folio to recover_inode()
>   f2fs: Pass a folio to recover_quota_data()
>   f2fs: Pass a folio to f2fs_recover_inode_page()
>   f2fs: Pass a folio to sanity_check_extent_cache()
>   f2fs: Pass a folio to sanity_check_inode()
>   f2fs: Pass a folio to f2fs_sanity_check_inline_data()
>   f2fs: Pass a folio to inode_has_blocks()
>   f2fs: Pass a folio to F2FS_INODE()
>   f2fs: Pass a folio to ino_of_node()
>   f2fs: Pass a folio to nid_of_node()
>   f2fs: Pass a folio to is_recoverable_dnode()
>   f2fs: Pass a folio to set_dentry_mark()
>   f2fs: Pass a folio to set_fsync_mark()
>   f2fs: Pass a folio to set_mark()
>   f2fs: Pass a folio to f2fs_allocate_data_block()
>   f2fs: Pass a folio to f2fs_inode_chksum_set()
>   f2fs: Pass a folio to f2fs_enable_inode_chksum()
>   f2fs: Pass a folio to f2fs_inode_chksum()
>   f2fs: Pass a folio to fill_node_footer_blkaddr()
>   f2fs: Pass a folio to get_nid()
>   f2fs: Pass a folio to set_cold_node()
>   f2fs: Pass folios to copy_node_footer()
>   f2fs: Pass a folio to fill_node_footer()
>   f2fs: Pass a folio to cpver_of_node()
>   f2fs: Pass a folio to f2fs_recover_xattr_data()
>   f2fs: Pass a folio to is_fsync_dnode()
>   f2fs: Pass a folio to is_dent_dnode()
>   f2fs: Add fio->folio
>   f2fs: Use folio_unlock() in f2fs_write_compressed_pages()
>   f2fs: Pass a folio to is_cold_node()
>   f2fs: Pass a folio to is_node()
>   f2fs: Pass a folio to IS_DNODE()
>   f2fs: Pass a folio to ofs_of_node()
>   f2fs: Pass a folio to get_dnode_base()
>   f2fs: Pass a folio to ADDRS_PER_PAGE()
>   f2fs: Pass a folio to IS_INODE()

All above patches in dev-test branch look good to me, please feel free
to add my reviewed-by tag.

I've checked below patches as well, but still have one question to confirm.

Thanks,

>   f2fs: Add folio counterparts to page_private_flags functions
>   f2fs: Use a folio in f2fs_is_cp_guaranteed()
>   f2fs: Convert set_page_private_data() to folio_set_f2fs_data()
>   f2fs: Convert get_page_private_data() to folio_get_f2fs_data()
>   f2fs: Pass a folio to f2fs_compress_write_end_io()
>   f2fs: Use a folio in f2fs_merge_page_bio()
>   f2fs: Use a bio in f2fs_submit_page_write()
>   f2fs: Pass a folio to WB_DATA_TYPE() and f2fs_is_cp_guaranteed()
>   f2fs: Use a folio iterator in f2fs_handle_step_decompress()
>   f2fs: Pass a folio to f2fs_end_read_compressed_page()
>   f2fs: Use a folio iterator in f2fs_verify_bio()
>   f2fs: Pass a folio to f2fs_is_compressed_page()
>   f2fs: Convert get_next_nat_page() to get_next_nat_folio()
>   f2fs: Pass the nat_blk to __update_nat_bits()
>   f2fs: Pass a folio to F2FS_NODE()
>   f2fs: Pass a folio to f2fs_cache_compressed_page()
>   f2fs: Use a folio in f2fs_encrypted_get_link()
>   f2fs: Use F2FS_F_SB() in f2fs_read_end_io()
>   f2fs: Remove clear_page_private_all()
>   f2fs: Remove use of page from f2fs_write_single_data_page()
>   f2fs: Pass a folio to f2fs_submit_merged_write_cond()
>   f2fs: Pass a folio to __has_merged_page()
>   f2fs: Remove F2FS_P_SB()
> 
>  fs/f2fs/checkpoint.c    |   8 +-
>  fs/f2fs/compress.c      |  44 +++++------
>  fs/f2fs/data.c          | 138 +++++++++++++++++-----------------
>  fs/f2fs/dir.c           |   4 +-
>  fs/f2fs/extent_cache.c  |   8 +-
>  fs/f2fs/f2fs.h          | 135 +++++++++++++++++----------------
>  fs/f2fs/file.c          |  28 +++----
>  fs/f2fs/gc.c            |  18 ++---
>  fs/f2fs/inline.c        |  20 ++---
>  fs/f2fs/inode.c         |  61 +++++++--------
>  fs/f2fs/namei.c         |  12 +--
>  fs/f2fs/node.c          | 162 ++++++++++++++++++++--------------------
>  fs/f2fs/node.h          |  75 ++++++++++---------
>  fs/f2fs/recovery.c      |  78 +++++++++----------
>  fs/f2fs/segment.c       |  27 ++++---
>  include/linux/f2fs_fs.h |   2 +-
>  include/linux/fscrypt.h |   7 +-
>  17 files changed, 414 insertions(+), 413 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] 65+ messages in thread

end of thread, other threads:[~2025-07-22  7:04 UTC | newest]

Thread overview: 65+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-08 17:02 [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 Matthew Wilcox (Oracle)
2025-07-08 17:02 ` [f2fs-dev] [PATCH 01/60] f2fs: Pass a folio to recover_dentry() Matthew Wilcox (Oracle)
2025-07-08 17:02 ` [f2fs-dev] [PATCH 02/60] f2fs: Pass a folio to recover_inode() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 03/60] f2fs: Pass a folio to recover_quota_data() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 04/60] f2fs: Pass a folio to f2fs_recover_inode_page() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 05/60] f2fs: Pass a folio to sanity_check_extent_cache() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 06/60] f2fs: Pass a folio to sanity_check_inode() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 07/60] f2fs: Pass a folio to f2fs_sanity_check_inline_data() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 08/60] f2fs: Pass a folio to inode_has_blocks() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 09/60] f2fs: Pass a folio to F2FS_INODE() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 10/60] f2fs: Pass a folio to ino_of_node() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 11/60] f2fs: Pass a folio to nid_of_node() Matthew Wilcox (Oracle)
2025-07-09 19:56   ` Jaegeuk Kim via Linux-f2fs-devel
2025-07-08 17:03 ` [f2fs-dev] [PATCH 12/60] f2fs: Pass a folio to is_recoverable_dnode() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 13/60] f2fs: Pass a folio to set_dentry_mark() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 14/60] f2fs: Pass a folio to set_fsync_mark() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 15/60] f2fs: Pass a folio to set_mark() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 16/60] f2fs: Pass a folio to f2fs_allocate_data_block() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 17/60] f2fs: Pass a folio to f2fs_inode_chksum_set() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 18/60] f2fs: Pass a folio to f2fs_enable_inode_chksum() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 19/60] f2fs: Pass a folio to f2fs_inode_chksum() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 20/60] f2fs: Pass a folio to fill_node_footer_blkaddr() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 21/60] f2fs: Pass a folio to get_nid() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 22/60] f2fs: Pass a folio to set_cold_node() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 23/60] f2fs: Pass folios to copy_node_footer() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 24/60] f2fs: Pass a folio to fill_node_footer() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 25/60] f2fs: Pass a folio to cpver_of_node() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 26/60] f2fs: Pass a folio to f2fs_recover_xattr_data() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 27/60] f2fs: Pass a folio to is_fsync_dnode() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 28/60] f2fs: Pass a folio to is_dent_dnode() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 29/60] f2fs: Add fio->folio Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 30/60] f2fs: Use folio_unlock() in f2fs_write_compressed_pages() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 31/60] f2fs: Pass a folio to is_cold_node() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 32/60] f2fs: Pass a folio to is_node() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 33/60] f2fs: Pass a folio to IS_DNODE() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 34/60] f2fs: Pass a folio to ofs_of_node() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 35/60] f2fs: Pass a folio to get_dnode_base() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 36/60] f2fs: Pass a folio to ADDRS_PER_PAGE() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 37/60] f2fs: Pass a folio to IS_INODE() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 38/60] f2fs: Add folio counterparts to page_private_flags functions Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 39/60] f2fs: Use a folio in f2fs_is_cp_guaranteed() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 40/60] f2fs: Convert set_page_private_data() to folio_set_f2fs_data() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 41/60] f2fs: Convert get_page_private_data() to folio_get_f2fs_data() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 42/60] f2fs: Pass a folio to f2fs_compress_write_end_io() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 43/60] f2fs: Use a folio in f2fs_merge_page_bio() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 44/60] f2fs: Use a bio in f2fs_submit_page_write() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 45/60] f2fs: Pass a folio to WB_DATA_TYPE() and f2fs_is_cp_guaranteed() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 46/60] f2fs: Use a folio iterator in f2fs_handle_step_decompress() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 47/60] f2fs: Pass a folio to f2fs_end_read_compressed_page() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 48/60] f2fs: Use a folio iterator in f2fs_verify_bio() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 49/60] f2fs: Pass a folio to f2fs_is_compressed_page() Matthew Wilcox (Oracle)
2025-07-22  6:54   ` Chao Yu via Linux-f2fs-devel
2025-07-08 17:03 ` [f2fs-dev] [PATCH 50/60] f2fs: Convert get_next_nat_page() to get_next_nat_folio() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 51/60] f2fs: Pass the nat_blk to __update_nat_bits() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 52/60] f2fs: Pass a folio to F2FS_NODE() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 53/60] f2fs: Pass a folio to f2fs_cache_compressed_page() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 54/60] f2fs: Use a folio in f2fs_encrypted_get_link() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 55/60] f2fs: Use F2FS_F_SB() in f2fs_read_end_io() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 56/60] f2fs: Remove clear_page_private_all() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 57/60] f2fs: Remove use of page from f2fs_write_single_data_page() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 58/60] f2fs: Pass a folio to f2fs_submit_merged_write_cond() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 59/60] f2fs: Pass a folio to __has_merged_page() Matthew Wilcox (Oracle)
2025-07-08 17:03 ` [f2fs-dev] [PATCH 60/60] f2fs: Remove F2FS_P_SB() Matthew Wilcox (Oracle)
2025-07-11 16:20 ` [f2fs-dev] [PATCH 00/60] f2fs folio conversions for 6.17 patchwork-bot+f2fs--- via Linux-f2fs-devel
2025-07-22  7:03 ` Chao Yu 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).