Commit b69ac13c authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet
Browse files

bcachefs: Fix bch2_trans_relock()



The patch that changed bch2_trans_relock() to not look at iter->uptodate
also tried to add an optimization by only having it relock
btree_iter_key() iterators (iterators that are live or have been marked
as keep). But, this wasn't thought through - this pops internal iterator
assertions because on transaction restart, when we're traversing
iterators we traverse all iterators marked as linked, and having
bch2_trans_relock() skip some of those mean that it can skil the
iterator that bch2_btree_iter_traverse_one() is currently traversing.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent b906aadd
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -472,8 +472,7 @@ bool bch2_trans_relock(struct btree_trans *trans)
	struct btree_iter *iter;

	trans_for_each_iter(trans, iter)
		if (btree_iter_keep(trans, iter) &&
		    !bch2_btree_iter_relock(iter, true)) {
		if (!bch2_btree_iter_relock(iter, true)) {
			trace_trans_restart_relock(trans->ip);
			return false;
		}