f2fs: refactor f2fs_move_node_folio function

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>
This commit is contained in:
Yongpeng Yang 2026-03-18 16:45:32 +08:00 committed by Jaegeuk Kim
parent be09d78b6d
commit 92c2098936

View File

@ -1841,41 +1841,51 @@ static bool __write_node_folio(struct folio *folio, bool atomic, bool *submitted
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,
};
f2fs_folio_wait_writeback(node_folio, NODE, true, true);
folio_mark_dirty(node_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 {
if (!sync_mode) {
/* set page dirty and write it */
if (!folio_test_writeback(node_folio))
folio_mark_dirty(node_folio);
goto out_folio;
}
out_page:
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_folio;
}
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)