struct btree_iter *iter)
{
struct bkey_i *k = bch2_journal_keys_peek_slot(trans->c, iter->btree_id,
- 0, iter->path->pos);
+ iter->path->level,
+ iter->path->pos);
if (k) {
iter->k = k->k;
struct bkey_s_c k;
int ret;
- EBUG_ON(iter->path->level);
bch2_btree_iter_verify(iter);
bch2_btree_iter_verify_entry_exit(iter);
+ EBUG_ON(iter->path->level && (iter->flags & BTREE_ITER_WITH_KEY_CACHE));
/* extents can't span inode numbers: */
if ((iter->flags & BTREE_ITER_IS_EXTENTS) &&
} else {
struct bpos next;
+ EBUG_ON(iter->path->level);
+
if (iter->flags & BTREE_ITER_INTENT) {
struct btree_iter iter2;
struct bpos end = iter->pos;
if (trans->journal_replay_not_finished)
flags |= BTREE_ITER_WITH_JOURNAL;
- if (!btree_id_cached(trans->c, btree_id)) {
- flags &= ~BTREE_ITER_CACHED;
- flags &= ~BTREE_ITER_WITH_KEY_CACHE;
- } else if (!(flags & BTREE_ITER_CACHED))
- flags |= BTREE_ITER_WITH_KEY_CACHE;
-
iter->trans = trans;
iter->path = NULL;
iter->update_path = NULL;
unsigned btree_id, struct bpos pos,
unsigned flags)
{
+ if (!btree_id_cached(trans->c, btree_id)) {
+ flags &= ~BTREE_ITER_CACHED;
+ flags &= ~BTREE_ITER_WITH_KEY_CACHE;
+ } else if (!(flags & BTREE_ITER_CACHED))
+ flags |= BTREE_ITER_WITH_KEY_CACHE;
+
__bch2_trans_iter_init(trans, iter, btree_id, pos,
0, 0, flags);
}