Commit d50d7a5f authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: Check for logged ops when clean



If we shut down successfully, there shouldn't be any logged ops to
resume.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 1c0ee43b
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -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)
+2 −1
Original line number Diff line number Diff line
@@ -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,