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

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
...@@ -239,7 +239,19 @@ int __bch2_fsck_err(struct bch_fs *c, ...@@ -239,7 +239,19 @@ int __bch2_fsck_err(struct bch_fs *c,
if (!c) if (!c)
c = trans->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) && if ((flags & FSCK_CAN_FIX) &&
test_bit(err, c->sb.errors_silent)) test_bit(err, c->sb.errors_silent))
......
...@@ -184,7 +184,7 @@ do { \ ...@@ -184,7 +184,7 @@ do { \
ret = -BCH_ERR_fsck_delete_bkey; \ ret = -BCH_ERR_fsck_delete_bkey; \
goto fsck_err; \ 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, \ BCH_FSCK_ERR_##_err_type, \
_err_msg, ##__VA_ARGS__); \ _err_msg, ##__VA_ARGS__); \
if (_ret != -BCH_ERR_fsck_fix && \ if (_ret != -BCH_ERR_fsck_fix && \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment