bcachefs: Ensure btree iterators are traversed in bch2_trans_commit()
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 10 Mar 2021 00:37:40 +0000 (19:37 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:53 +0000 (17:08 -0400)
The upcoming patch to allow extents to span btree nodes will require
this... and this assertion seems to be popping, and it's not a very good
assertion anyways.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_update_leaf.c

index 022ab3d90871d99474d17c7d4b87ff48201d6123..2f94b8917a767936629d0356b8653a25d0b16f04 100644 (file)
@@ -929,9 +929,14 @@ int __bch2_trans_commit(struct btree_trans *trans)
        }
 
        trans_for_each_update2(trans, i) {
-               BUG_ON(i->iter->uptodate > BTREE_ITER_NEED_PEEK);
                BUG_ON(i->iter->locks_want < 1);
 
+               ret = bch2_btree_iter_traverse(i->iter);
+               if (unlikely(ret)) {
+                       trace_trans_restart_traverse(trans->ip);
+                       goto out;
+               }
+
                u64s = jset_u64s(i->k->k.u64s);
                if (btree_iter_type(i->iter) == BTREE_ITER_CACHED &&
                    likely(!(trans->flags & BTREE_INSERT_JOURNAL_REPLAY)))