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 f49fdca..6f4a4e1 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 6955bb4..c15c52e 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,