From: Kent Overstreet Date: Tue, 14 May 2019 17:25:25 +0000 (-0400) Subject: bcachefs: Fix a bug with multiple iterators being traversed X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=33eb63e5753ad6229d4027340153817b92840760;p=linux.git bcachefs: Fix a bug with multiple iterators being traversed If upgrade fails on one iterator, but it was copied from another iterator and will be freed before transaction restart, then the original iterator will get traversed first, so we need to make required btree nodes on the original iterator will be traversed too. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index ac3c3769e1261..eeb9a59283a7a 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -320,7 +320,6 @@ bool __bch2_btree_iter_upgrade(struct btree_iter *iter, trans_for_each_iter(iter->trans, linked) if (linked != iter && linked->btree_id == iter->btree_id && - btree_iter_cmp(linked, iter) <= 0 && linked->locks_want < new_locks_want) { linked->locks_want = new_locks_want; btree_iter_get_locks(linked, true);