diff options
Diffstat (limited to 'libbcachefs/btree_iter.h')
-rw-r--r-- | libbcachefs/btree_iter.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libbcachefs/btree_iter.h b/libbcachefs/btree_iter.h index bad51ceb..8ed5aee2 100644 --- a/libbcachefs/btree_iter.h +++ b/libbcachefs/btree_iter.h @@ -347,6 +347,11 @@ __btree_iter_peek_node_and_restart(struct btree_trans *trans, struct btree_iter return b; } +/* + * XXX + * this does not handle transaction restarts from bch2_btree_iter_next_node() + * correctly + */ #define __for_each_btree_node(_trans, _iter, _btree_id, _start, \ _locks_want, _depth, _flags, _b, _ret) \ for (bch2_trans_node_iter_init((_trans), &(_iter), (_btree_id), \ @@ -473,11 +478,11 @@ __bch2_btree_iter_peek_and_restart(struct btree_trans *trans, \ while (1) { \ u32 _restart_count = bch2_trans_begin(_trans); \ + \ + _ret = 0; \ (_k) = bch2_btree_iter_peek_type(&(_iter), (_flags)); \ - if (!(_k).k) { \ - _ret = 0; \ + if (!(_k).k) \ break; \ - } \ \ _ret = bkey_err(_k) ?: (_do); \ if (bch2_err_matches(_ret, BCH_ERR_transaction_restart))\ |