Introudce a helper function to check whether an inode may use
large folio for scalability.

Signed-off-by: Nanzhe Zhao <[email protected]>
---
 fs/f2fs/f2fs.h  | 16 ++++++++++++++++
 fs/f2fs/inode.c |  3 +--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index bdcd446f6b18..e5b8f5374666 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -5035,6 +5035,22 @@ static inline bool f2fs_quota_file(struct f2fs_sb_info 
*sbi, nid_t ino)
        return false;
 }
 
+static inline bool f2fs_inode_may_use_large_folio(struct inode *inode)
+{
+       if (f2fs_has_inline_data(inode))
+               return false;
+
+       if (f2fs_compressed_file(inode))
+               return false;
+
+       if (f2fs_is_atomic_file(inode))
+               return false;
+
+       if (f2fs_quota_file(F2FS_I_SB(inode), inode->i_ino))
+               return false;
+       return true;
+}
+
 static inline bool f2fs_block_unit_discard(struct f2fs_sb_info *sbi)
 {
        return F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_BLOCK;
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index b8cf1fab6391..e2e85ac9c44e 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -620,8 +620,7 @@ struct inode *f2fs_iget(struct super_block *sb, unsigned 
long ino)
                inode->i_op = &f2fs_file_inode_operations;
                inode->i_fop = &f2fs_file_operations;
                inode->i_mapping->a_ops = &f2fs_dblock_aops;
-               if (IS_IMMUTABLE(inode) && !f2fs_compressed_file(inode) &&
-                   !f2fs_quota_file(sbi, inode->i_ino))
+               if (f2fs_inode_may_use_large_folio(inode))
                        mapping_set_folio_min_order(inode->i_mapping, 0);
        } else if (S_ISDIR(inode->i_mode)) {
                inode->i_op = &f2fs_dir_inode_operations;
-- 
2.34.1



_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to