mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 15:41:52 +02:00
bcachefs: Issue a transaction restart after commit in repair
transaction commits invalidate pointers to btree values, and they also downgrade intent locks. This breaks the interior btree update path, which takes intent locks and then calls into the allocator. This isn't an ideal solution: we can't unconditionally issue a restart after a transaction commit, because that would break other codepaths. Reported-by: syzbot+78d82470c16a49702682@syzkaller.appspotmail.com Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
b3d82c2f27
commit
f9e0a9be70
|
|
@ -1384,7 +1384,7 @@ int bch2_check_discard_freespace_key(struct btree_trans *trans, struct btree_ite
|
|||
ret = bch2_btree_bit_mod_iter(trans, iter, false) ?:
|
||||
bch2_trans_commit(trans, NULL, NULL,
|
||||
BCH_TRANS_COMMIT_no_enospc) ?:
|
||||
1;
|
||||
-BCH_ERR_transaction_restart_commit;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@
|
|||
x(BCH_ERR_transaction_restart, transaction_restart_split_race) \
|
||||
x(BCH_ERR_transaction_restart, transaction_restart_write_buffer_flush) \
|
||||
x(BCH_ERR_transaction_restart, transaction_restart_nested) \
|
||||
x(BCH_ERR_transaction_restart, transaction_restart_commit) \
|
||||
x(0, no_btree_node) \
|
||||
x(BCH_ERR_no_btree_node, no_btree_node_relock) \
|
||||
x(BCH_ERR_no_btree_node, no_btree_node_upgrade) \
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user