Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit beb74f77 authored by Jaegeuk Kim's avatar Jaegeuk Kim Committed by Jaegeuk Kim
Browse files

f2fs: count dirty inodes to flush node pages during checkpoint



commit b9610bdfcbdbb6017802ec6d1e073f445c98157d upstream.

If there are a lot of dirty inodes, we need to flush all of them when doing
checkpoint. So, we need to count this for enough free space.

Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 9f99694b
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -471,11 +471,12 @@ static inline bool need_SSR(struct f2fs_sb_info *sbi)
{
	int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES);
	int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);
	int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);

	if (test_opt(sbi, LFS))
		return false;

	return free_sections(sbi) <= (node_secs + 2 * dent_secs +
	return free_sections(sbi) <= (node_secs + 2 * dent_secs + imeta_secs +
						reserved_sections(sbi) + 1);
}

@@ -484,14 +485,14 @@ static inline bool has_not_enough_free_secs(struct f2fs_sb_info *sbi,
{
	int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES);
	int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);

	node_secs += get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);
	int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);

	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
		return false;

	return (free_sections(sbi) + freed) <=
		(node_secs + 2 * dent_secs + reserved_sections(sbi) + needed);
		(node_secs + 2 * dent_secs + imeta_secs +
		reserved_sections(sbi) + needed);
}

static inline bool excess_prefree_segs(struct f2fs_sb_info *sbi)