bcachefs: Fix __bch2_trans_get_iter()
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 27 Apr 2021 15:12:17 +0000 (11:12 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:02 +0000 (17:09 -0400)
We need to also set iter->uptodate to indicate it needs to be traversed.

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

index 11f7b47e3e7f4eaaa042fa5271225ac7ca30a217..757e5650f33c634b9fd9fd8e6fd78fb70cf15cd7 100644 (file)
@@ -2085,15 +2085,16 @@ struct btree_iter *__bch2_trans_get_iter(struct btree_trans *trans,
                btree_iter_get_locks(iter, true, false);
        }
 
-       while (iter->level < depth) {
+       while (iter->level != depth) {
                btree_node_unlock(iter, iter->level);
                iter->l[iter->level].b = BTREE_ITER_NO_NODE_INIT;
-               iter->level++;
+               iter->uptodate = BTREE_ITER_NEED_TRAVERSE;
+               if (iter->level < depth)
+                       iter->level++;
+               else
+                       iter->level--;
        }
 
-       while (iter->level > depth)
-               iter->l[--iter->level].b = BTREE_ITER_NO_NODE_INIT;
-
        iter->min_depth = depth;
 
        bch2_btree_iter_set_pos(iter, pos);