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

Commit 8501017e authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

f2fs: check s_dirty under cp_mutex



It needs to check s_dirty under cp_mutex, since s_dirty is reset under that
mutex.
And previous condition was not correct, since we can omit doing checkpoint
when checkpoint was done followed by all the node pages were written back.

Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 52746519
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -952,6 +952,10 @@ void write_checkpoint(struct f2fs_sb_info *sbi, bool is_umount)
	trace_f2fs_write_checkpoint(sbi->sb, is_umount, "start block_ops");

	mutex_lock(&sbi->cp_mutex);

	if (!sbi->s_dirty)
		goto out;

	block_operations(sbi);

	trace_f2fs_write_checkpoint(sbi->sb, is_umount, "finish block_ops");
@@ -976,9 +980,9 @@ void write_checkpoint(struct f2fs_sb_info *sbi, bool is_umount)
	do_checkpoint(sbi, is_umount);

	unblock_operations(sbi);
	mutex_unlock(&sbi->cp_mutex);

	stat_inc_cp_count(sbi->stat_info);
out:
	mutex_unlock(&sbi->cp_mutex);
	trace_f2fs_write_checkpoint(sbi->sb, is_umount, "finish checkpoint");
}

+0 −3
Original line number Diff line number Diff line
@@ -460,9 +460,6 @@ int f2fs_sync_fs(struct super_block *sb, int sync)

	trace_f2fs_sync_fs(sb, sync);

	if (!sbi->s_dirty && !get_pages(sbi, F2FS_DIRTY_NODES))
		return 0;

	if (sync) {
		mutex_lock(&sbi->gc_mutex);
		write_checkpoint(sbi, false);