]> www.infradead.org Git - nvme.git/commitdiff
bcachefs: Check for logged ops when clean
authorKent Overstreet <kent.overstreet@linux.dev>
Thu, 26 Sep 2024 20:23:30 +0000 (16:23 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 28 Sep 2024 02:32:22 +0000 (22:32 -0400)
If we shut down successfully, there shouldn't be any logged ops to
resume.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/logged_ops.c
fs/bcachefs/sb-errors_format.h

index f49fdca1d07dca41d8197308da8d669555158f59..6f4a4e1083c9558cfe811617915e90f535f5cd2e 100644 (file)
@@ -37,6 +37,14 @@ static int resume_logged_op(struct btree_trans *trans, struct btree_iter *iter,
        const struct bch_logged_op_fn *fn = logged_op_fn(k.k->type);
        struct bkey_buf sk;
        u32 restart_count = trans->restart_count;
+       struct printbuf buf = PRINTBUF;
+       int ret = 0;
+
+       fsck_err_on(test_bit(BCH_FS_clean_recovery, &c->flags),
+                   trans, logged_op_but_clean,
+                   "filesystem marked as clean but have logged op\n%s",
+                   (bch2_bkey_val_to_text(&buf, c, k),
+                    buf.buf));
 
        if (!fn)
                return 0;
@@ -47,8 +55,9 @@ static int resume_logged_op(struct btree_trans *trans, struct btree_iter *iter,
        fn->resume(trans, sk.k);
 
        bch2_bkey_buf_exit(&sk, c);
-
-       return trans_was_restarted(trans, restart_count);
+fsck_err:
+       printbuf_exit(&buf);
+       return ret ?: trans_was_restarted(trans, restart_count);
 }
 
 int bch2_resume_logged_ops(struct bch_fs *c)
index 6955bb4ea4c523d56d9ed3501f6231f3350c26bb..c15c52ebf699b75bf583b775678921c59653b00b 100644 (file)
@@ -294,7 +294,8 @@ enum bch_fsck_flags {
        x(accounting_key_replicas_nr_required_bad,              279,    FSCK_AUTOFIX)   \
        x(accounting_key_replicas_devs_unsorted,                280,    FSCK_AUTOFIX)   \
        x(accounting_key_version_0,                             282,    FSCK_AUTOFIX)   \
-       x(MAX,                                                  283,    0)
+       x(logged_op_but_clean,                                  283,    FSCK_AUTOFIX)   \
+       x(MAX,                                                  284,    0)
 
 enum bch_sb_error_id {
 #define x(t, n, ...) BCH_FSCK_ERR_##t = n,