Message ID | 1737425741-3004-1-git-send-email-zhiguo.niu@unisoc.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [f2fs-dev] f2fs: fix to avoid changing 'check only' behaior of recovery | expand |
On 1/21/25 10:15, Zhiguo Niu wrote: > 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 > 23738e74472f ("f2fs: fix to restrict mount condition on readonly block device") > 2. mount optiont NORECOVERY or DISABLE_ROLL_FORWARD is set, shown as commit > 6781eabba1bd ("f2fs: give -EINVAL for norecovery and rw mount") > > However, commit c426d99127b1 ("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: c426d99127b1 ("f2fs: Check write pointer consistency of open zones") > Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com> Reviewed-by: Chao Yu <chao@kernel.org> Thanks,
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c index f35be2c..69a2027 100644 --- a/fs/f2fs/recovery.c +++ b/fs/f2fs/recovery.c @@ -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); diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 813254d..c9b6d9a 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -5462,7 +5462,9 @@ 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");
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 23738e74472f ("f2fs: fix to restrict mount condition on readonly block device") 2. mount optiont NORECOVERY or DISABLE_ROLL_FORWARD is set, shown as commit 6781eabba1bd ("f2fs: give -EINVAL for norecovery and rw mount") However, commit c426d99127b1 ("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: c426d99127b1 ("f2fs: Check write pointer consistency of open zones") Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com> --- fs/f2fs/recovery.c | 4 +--- fs/f2fs/segment.c | 4 +++- 2 files changed, 4 insertions(+), 4 deletions(-) -- 1.9.1