]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
f2fs: refactor f2fs_move_node_folio function
authorYongpeng Yang <yangyongpeng@xiaomi.com>
Wed, 18 Mar 2026 08:45:32 +0000 (16:45 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 2 Apr 2026 16:24:18 +0000 (16:24 +0000)
This patch refactor the f2fs_move_node_folio() function. No logical
changes.

Cc: stable@kernel.org
Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/node.c

index 31085d659ccc954c1f86ee55fec197e1135f9888..b8e5cadbab3ad061d03c08a5911571ba23889894 100644 (file)
@@ -1841,41 +1841,51 @@ redirty_out:
        return false;
 }
 
-int f2fs_move_node_folio(struct folio *node_folio, int gc_type)
+static int f2fs_write_single_node_folio(struct folio *node_folio, int sync_mode,
+                       bool mark_dirty, enum iostat_type io_type)
 {
        int err = 0;
+       struct writeback_control wbc = {
+               .sync_mode = WB_SYNC_ALL,
+               .nr_to_write = 1,
+       };
 
-       if (gc_type == FG_GC) {
-               struct writeback_control wbc = {
-                       .sync_mode = WB_SYNC_ALL,
-                       .nr_to_write = 1,
-               };
+       if (!sync_mode) {
+               /* set page dirty and write it */
+               if (!folio_test_writeback(node_folio))
+                       folio_mark_dirty(node_folio);
+               goto out_folio;
+       }
 
-               f2fs_folio_wait_writeback(node_folio, NODE, true, true);
+       f2fs_folio_wait_writeback(node_folio, NODE, true, true);
 
+       if (mark_dirty)
                folio_mark_dirty(node_folio);
+       else if (!folio_test_dirty(node_folio))
+               goto out_folio;
 
-               if (!folio_clear_dirty_for_io(node_folio)) {
-                       err = -EAGAIN;
-                       goto out_page;
-               }
-
-               if (!__write_node_folio(node_folio, false, NULL,
-                                       &wbc, false, FS_GC_NODE_IO, NULL))
-                       err = -EAGAIN;
-               goto release_page;
-       } else {
-               /* set page dirty and write it */
-               if (!folio_test_writeback(node_folio))
-                       folio_mark_dirty(node_folio);
+       if (!folio_clear_dirty_for_io(node_folio)) {
+               err = -EAGAIN;
+               goto out_folio;
        }
-out_page:
+
+       if (!__write_node_folio(node_folio, false, NULL,
+                               &wbc, false, FS_GC_NODE_IO, NULL))
+               err = -EAGAIN;
+       goto release_folio;
+out_folio:
        folio_unlock(node_folio);
-release_page:
+release_folio:
        f2fs_folio_put(node_folio, false);
        return err;
 }
 
+int f2fs_move_node_folio(struct folio *node_folio, int gc_type)
+{
+       return f2fs_write_single_node_folio(node_folio, gc_type == FG_GC,
+                       true, FS_GC_NODE_IO);
+}
+
 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
                        struct writeback_control *wbc, bool atomic,
                        unsigned int *seq_id)