From d36cdb045aa7029f8495d18760da6c944ab95cb3 Mon Sep 17 00:00:00 2001
From: Kent Overstreet <kent.overstreet@gmail.com>
Date: Tue, 27 Apr 2021 11:12:17 -0400
Subject: [PATCH] bcachefs: Fix __bch2_trans_get_iter()

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 | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index 11f7b47e3e7f4..757e5650f33c6 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -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);
-- 
2.30.2