Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

f2fs: fix to propagate error from f2fs_enable_checkpoint()

In order to let userspace detect such error rather than suffering
silent failure.

Fixes: 4354994f097d ("f2fs: checkpoint disabling")
Cc: stable@kernel.org
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

authored by

Chao Yu and committed by
Jaegeuk Kim
be112e74 89c16629

+16 -10
+16 -10
fs/f2fs/super.c
··· 2632 2632 return err; 2633 2633 } 2634 2634 2635 - static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi) 2635 + static int f2fs_enable_checkpoint(struct f2fs_sb_info *sbi) 2636 2636 { 2637 2637 unsigned int nr_pages = get_pages(sbi, F2FS_DIRTY_DATA) / 16; 2638 2638 long long start, writeback, end; 2639 + int ret; 2639 2640 2640 2641 f2fs_info(sbi, "f2fs_enable_checkpoint() starts, meta: %lld, node: %lld, data: %lld", 2641 2642 get_pages(sbi, F2FS_DIRTY_META), ··· 2670 2669 set_sbi_flag(sbi, SBI_IS_DIRTY); 2671 2670 f2fs_up_write(&sbi->gc_lock); 2672 2671 2673 - f2fs_sync_fs(sbi->sb, 1); 2672 + ret = f2fs_sync_fs(sbi->sb, 1); 2673 + if (ret) 2674 + f2fs_err(sbi, "%s sync_fs failed, ret: %d", __func__, ret); 2674 2675 2675 2676 /* Let's ensure there's no pending checkpoint anymore */ 2676 2677 f2fs_flush_ckpt_thread(sbi); ··· 2682 2679 f2fs_info(sbi, "f2fs_enable_checkpoint() finishes, writeback:%llu, sync:%llu", 2683 2680 ktime_ms_delta(writeback, start), 2684 2681 ktime_ms_delta(end, writeback)); 2682 + return ret; 2685 2683 } 2686 2684 2687 2685 static int __f2fs_remount(struct fs_context *fc, struct super_block *sb) ··· 2896 2892 goto restore_discard; 2897 2893 need_enable_checkpoint = true; 2898 2894 } else { 2899 - f2fs_enable_checkpoint(sbi); 2895 + err = f2fs_enable_checkpoint(sbi); 2896 + if (err) 2897 + goto restore_discard; 2900 2898 need_disable_checkpoint = true; 2901 2899 } 2902 2900 } ··· 2941 2935 return 0; 2942 2936 restore_checkpoint: 2943 2937 if (need_enable_checkpoint) { 2944 - f2fs_enable_checkpoint(sbi); 2938 + if (f2fs_enable_checkpoint(sbi)) 2939 + f2fs_warn(sbi, "checkpoint has not been enabled"); 2945 2940 } else if (need_disable_checkpoint) { 2946 2941 if (f2fs_disable_checkpoint(sbi)) 2947 2942 f2fs_warn(sbi, "checkpoint has not been disabled"); ··· 5219 5212 if (err) 5220 5213 goto sync_free_meta; 5221 5214 5222 - if (test_opt(sbi, DISABLE_CHECKPOINT)) { 5215 + if (test_opt(sbi, DISABLE_CHECKPOINT)) 5223 5216 err = f2fs_disable_checkpoint(sbi); 5224 - if (err) 5225 - goto sync_free_meta; 5226 - } else if (is_set_ckpt_flags(sbi, CP_DISABLED_FLAG)) { 5227 - f2fs_enable_checkpoint(sbi); 5228 - } 5217 + else if (is_set_ckpt_flags(sbi, CP_DISABLED_FLAG)) 5218 + err = f2fs_enable_checkpoint(sbi); 5219 + if (err) 5220 + goto sync_free_meta; 5229 5221 5230 5222 /* 5231 5223 * If filesystem is not mounted as read-only then