summaryrefslogtreecommitdiffstats
path: root/fs/bcachefs/logged_ops.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2024-09-26 22:23:30 +0200
committerKent Overstreet <kent.overstreet@linux.dev>2024-09-28 04:32:22 +0200
commitd50d7a5fa4df3190b6b6c6d6551b631fda4a4ed2 (patch)
tree0464f0020e9d12022960e295245d9766e4d325ce /fs/bcachefs/logged_ops.c
parentbcachefs: BCH_FS_clean_recovery (diff)
downloadlinux-d50d7a5fa4df3190b6b6c6d6551b631fda4a4ed2.tar.xz
linux-d50d7a5fa4df3190b6b6c6d6551b631fda4a4ed2.zip
bcachefs: Check for logged ops when clean
If we shut down successfully, there shouldn't be any logged ops to resume. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/logged_ops.c')
-rw-r--r--fs/bcachefs/logged_ops.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/bcachefs/logged_ops.c b/fs/bcachefs/logged_ops.c
index f49fdca1d07d..6f4a4e1083c9 100644
--- a/fs/bcachefs/logged_ops.c
+++ b/fs/bcachefs/logged_ops.c
@@ -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)