mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 06:43:09 +00:00
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: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
5274651927
commit
8501017e50
@ -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");
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user