On 2024/2/20 13:34, Zhiguo Niu wrote:
I think do f2fs_handle_error in __is_bitmap_valid is a good way.

Like this?

---
 fs/f2fs/checkpoint.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 87b7c988c8ca..b8a7e83eb4e0 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -155,21 +155,24 @@ static bool __is_bitmap_valid(struct f2fs_sb_info *sbi, 
block_t blkaddr,
                return exist;

        if ((exist && type == DATA_GENERIC_ENHANCE_UPDATE) ||
-               (!exist && type == DATA_GENERIC_ENHANCE)) {
-               f2fs_err(sbi, "Inconsistent error blkaddr:%u, sit bitmap:%d",
-                        blkaddr, exist);
-               set_sbi_flag(sbi, SBI_NEED_FSCK);
-               dump_stack();
-       }
-
+               (!exist && type == DATA_GENERIC_ENHANCE))
+               goto out_err;
+       if (!exist && type != DATA_GENERIC_ENHANCE_UPDATE)
+               goto out_handle;
+       return exist;
+out_err:
+       f2fs_err(sbi, "Inconsistent error blkaddr:%u, sit bitmap:%d",
+                blkaddr, exist);
+       set_sbi_flag(sbi, SBI_NEED_FSCK);
+       dump_stack();
+out_handle:
+       f2fs_handle_error(sbi, ERROR_INVALID_BLKADDR);
        return exist;
 }

 static bool __f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
                                        block_t blkaddr, int type)
 {
-       bool valid = false;
-
        switch (type) {
        case META_NAT:
                break;
@@ -209,10 +212,7 @@ static bool __f2fs_is_valid_blkaddr(struct f2fs_sb_info 
*sbi,
                        dump_stack();
                        goto err;
                } else {
-                       valid = __is_bitmap_valid(sbi, blkaddr, type);
-                       if ((!valid && type != DATA_GENERIC_ENHANCE_UPDATE) ||
-                               (valid && type == DATA_GENERIC_ENHANCE_UPDATE))
-                               goto err;
+                       return __is_bitmap_valid(sbi, blkaddr, type);
                }
                break;
        case META_GENERIC:
@@ -227,7 +227,7 @@ static bool __f2fs_is_valid_blkaddr(struct f2fs_sb_info 
*sbi,
        return true;
 err:
        f2fs_handle_error(sbi, ERROR_INVALID_BLKADDR);
-       return valid;
+       return false;
 }

 bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
--
2.40.1




_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to