|
@@ -800,13 +800,17 @@ int f2fs_sync_fs(struct super_block *sb, int sync)
|
|
|
|
|
|
static int f2fs_freeze(struct super_block *sb)
|
|
|
{
|
|
|
- int err;
|
|
|
-
|
|
|
if (f2fs_readonly(sb))
|
|
|
return 0;
|
|
|
|
|
|
- err = f2fs_sync_fs(sb, 1);
|
|
|
- return err;
|
|
|
+ /* IO error happened before */
|
|
|
+ if (unlikely(f2fs_cp_error(F2FS_SB(sb))))
|
|
|
+ return -EIO;
|
|
|
+
|
|
|
+ /* must be clean, since sync_filesystem() was already called */
|
|
|
+ if (is_sbi_flag_set(F2FS_SB(sb), SBI_IS_DIRTY))
|
|
|
+ return -EINVAL;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int f2fs_unfreeze(struct super_block *sb)
|
|
@@ -2152,3 +2156,4 @@ module_exit(exit_f2fs_fs)
|
|
|
MODULE_AUTHOR("Samsung Electronics's Praesto Team");
|
|
|
MODULE_DESCRIPTION("Flash Friendly File System");
|
|
|
MODULE_LICENSE("GPL");
|
|
|
+
|