From: Kent Overstreet Date: Tue, 28 Feb 2023 02:26:07 +0000 (-0500) Subject: bcachefs: bch2_btree_iter_peek_and_restart_outlined() X-Git-Tag: io_uring-6.7-2023-11-10~119^2~469 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=0f2ea6550f1fbfabbe2db276107246c1236018ab;p=linux-block.git bcachefs: bch2_btree_iter_peek_and_restart_outlined() Needed for interfacing with Rust - bindgen can't handle inline functions, alas. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 63213205a043..eebab7534f62 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -2568,6 +2568,18 @@ struct bkey_s_c bch2_btree_iter_prev_slot(struct btree_iter *iter) return bch2_btree_iter_peek_slot(iter); } +struct bkey_s_c bch2_btree_iter_peek_and_restart_outlined(struct btree_iter *iter) +{ + struct bkey_s_c k; + + while (btree_trans_too_many_iters(iter->trans) || + (k = bch2_btree_iter_peek_type(iter, iter->flags), + bch2_err_matches(bkey_err(k), BCH_ERR_transaction_restart))) + bch2_trans_begin(iter->trans); + + return k; +} + /* new transactional stuff: */ #ifdef CONFIG_BCACHEFS_DEBUG diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h index 50b39704c56f..8e1f754e641b 100644 --- a/fs/bcachefs/btree_iter.h +++ b/fs/bcachefs/btree_iter.h @@ -595,6 +595,8 @@ static inline int btree_trans_too_many_iters(struct btree_trans *trans) return 0; } +struct bkey_s_c bch2_btree_iter_peek_and_restart_outlined(struct btree_iter *); + static inline struct bkey_s_c __bch2_btree_iter_peek_and_restart(struct btree_trans *trans, struct btree_iter *iter, unsigned flags)