diff mbox series

[f2fs-dev] f2fs: fix to avoid changing 'check only' behaior of recovery

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

Commit Message

Zhiguo Niu Jan. 21, 2025, 2:15 a.m. UTC
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
diff mbox series

Patch

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");