Commit edf3c086 authored by Zhiguo Niu's avatar Zhiguo Niu Committed by Jaegeuk Kim
Browse files

f2fs: fix to avoid changing 'check only' behaior of recovery



The following two 'check only recovery' processes are very dependent on
the return value of f2fs_recover_fsync_data, especially when the return
value is greater than 0.
1. when device has readonly mode, shown as commit
23738e74 ("f2fs: fix to restrict mount condition on readonly block device")
2. mount optiont NORECOVERY or DISABLE_ROLL_FORWARD is set, shown as commit
6781eabb ("f2fs: give -EINVAL for norecovery and rw mount")

However, commit c426d991 ("f2fs: Check write pointer consistency of open zones")
will change the return value unexpectedly, thereby changing the caller's behavior

This patch let the f2fs_recover_fsync_data return correct value,and not do
f2fs_check_and_fix_write_pointer when the device is read-only.

Fixes: c426d991 ("f2fs: Check write pointer consistency of open zones")
Signed-off-by: default avatarZhiguo Niu <zhiguo.niu@unisoc.com>
Reviewed-by: default avatarChao Yu <chao@kernel.org>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 6d4008dc
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -899,10 +899,8 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
	 * and the f2fs is not read only, check and fix zoned block devices'
	 * write pointer consistency.
	 */
	if (!err) {
	if (!err)
		err = f2fs_check_and_fix_write_pointer(sbi);
		ret = err;
	}

	if (!err)
		clear_sbi_flag(sbi, SBI_POR_DOING);
+2 −1
Original line number Diff line number Diff line
@@ -5462,7 +5462,8 @@ int f2fs_check_and_fix_write_pointer(struct f2fs_sb_info *sbi)
{
	int ret;

	if (!f2fs_sb_has_blkzoned(sbi) || f2fs_readonly(sbi->sb))
	if (!f2fs_sb_has_blkzoned(sbi) || f2fs_readonly(sbi->sb) ||
	    f2fs_hw_is_readonly(sbi))
		return 0;

	f2fs_notice(sbi, "Checking entire write pointers");