diff --git a/.bcachefs_revision b/.bcachefs_revision index 0718a7c7..faa5b410 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -cdf89ca564aa1916f16a58a06a395bfb3a86d302 +4c58f10d4897ff15849e6c028a9f665e03b8d4c0 diff --git a/libbcachefs/btree_iter.h b/libbcachefs/btree_iter.h index 876bf42c..61bbb7bc 100644 --- a/libbcachefs/btree_iter.h +++ b/libbcachefs/btree_iter.h @@ -303,8 +303,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;