Commit 5612daaf authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: Fix fsck warnings from bkey validation



__bch2_fsck_err() warns if the current task has a btree_trans object and
it wasn't passed in, because if it has to prompt for user input it has
to be able to unlock it.

But plumbing the btree_trans through bkey_validate(), as well as
transaction restarts, is problematic - so instead make bkey fsck errors
FSCK_AUTOFIX, which doesn't need to warn.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 7c980a43
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -239,7 +239,19 @@ int __bch2_fsck_err(struct bch_fs *c,
	if (!c)
		c = trans->c;

	WARN_ON(!trans && bch2_current_has_btree_trans(c));
	/*
	 * Ugly: if there's a transaction in the current task it has to be
	 * passed in to unlock if we prompt for user input.
	 *
	 * But, plumbing a transaction and transaction restarts into
	 * bkey_validate() is problematic.
	 *
	 * So:
	 * - make all bkey errors AUTOFIX, they're simple anyways (we just
	 *   delete the key)
	 * - and we don't need to warn if we're not prompting
	 */
	WARN_ON(!(flags & FSCK_AUTOFIX) && !trans && bch2_current_has_btree_trans(c));

	if ((flags & FSCK_CAN_FIX) &&
	    test_bit(err, c->sb.errors_silent))
+1 −1
Original line number Diff line number Diff line
@@ -184,7 +184,7 @@ do { \
		ret = -BCH_ERR_fsck_delete_bkey;			\
		goto fsck_err;						\
	}								\
	int _ret = __bch2_bkey_fsck_err(c, k, FSCK_CAN_FIX,		\
	int _ret = __bch2_bkey_fsck_err(c, k, FSCK_CAN_FIX|FSCK_AUTOFIX,\
				BCH_FSCK_ERR_##_err_type,		\
				_err_msg, ##__VA_ARGS__);		\
	if (_ret != -BCH_ERR_fsck_fix &&				\