]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: bkey_fsck_err now respects errors_silent
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 29 Nov 2024 23:20:42 +0000 (18:20 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 21 Dec 2024 06:36:21 +0000 (01:36 -0500)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/error.c

index abaa9570cd6201eccf9fd3a58dc0e0391b6eacf0..9e34374960f3adb34fab3d33f2e7fe568d512259 100644 (file)
@@ -476,11 +476,16 @@ int __bch2_bkey_fsck_err(struct bch_fs *c,
                return -BCH_ERR_fsck_delete_bkey;
 
        unsigned fsck_flags = 0;
-       if (!(from.flags & (BCH_VALIDATE_write|BCH_VALIDATE_commit)))
+       if (!(from.flags & (BCH_VALIDATE_write|BCH_VALIDATE_commit))) {
+               if (test_bit(err, c->sb.errors_silent))
+                       return -BCH_ERR_fsck_delete_bkey;
+
                fsck_flags |= FSCK_AUTOFIX|FSCK_CAN_FIX;
+       }
+       if (!WARN_ON(err >= ARRAY_SIZE(fsck_flags_extra)))
+               fsck_flags |= fsck_flags_extra[err];
 
        struct printbuf buf = PRINTBUF;
-       va_list args;
 
        prt_printf(&buf, "invalid bkey in %s btree=",
                   bch2_bkey_validate_contexts[from.from]);
@@ -489,9 +494,12 @@ int __bch2_bkey_fsck_err(struct bch_fs *c,
 
        bch2_bkey_val_to_text(&buf, c, k);
        prt_str(&buf, "\n  ");
+
+       va_list args;
        va_start(args, fmt);
        prt_vprintf(&buf, fmt, args);
        va_end(args);
+
        prt_str(&buf, ": delete?");
 
        int ret = __bch2_fsck_err(c, NULL, fsck_flags, err, "%s", buf.buf);