bcachefs: More general fix for transaction paths overflow
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 25 Oct 2021 22:30:28 +0000 (18:30 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:15 +0000 (17:09 -0400)
for_each_btree_key() now calls bch2_trans_begin() as needed; that means,
we can also call it when we're in danger of overflowing transaction
paths.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/btree_iter.h

index e58cad4b8fc6ea1962ba279d3b06515dc1794ef0..16fa0fe1c5b710328d354287824fb42e36151dbd 100644 (file)
@@ -329,8 +329,9 @@ __bch2_btree_iter_peek_and_restart(struct btree_trans *trans,
 {
        struct bkey_s_c k;
 
-       while (k = __bch2_btree_iter_peek(iter, flags),
-              bkey_err(k) == -EINTR)
+       while ((hweight64(trans->paths_allocated) > BTREE_ITER_MAX / 2) ||
+              (k = __bch2_btree_iter_peek(iter, flags),
+               bkey_err(k) == -EINTR))
                bch2_trans_begin(trans);
 
        return k;