Commit f58c22e7 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Avoid calling bch2_btree_iter_relock() in bch2_btree_iter_traverse()

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent e2ee3eaa
...@@ -294,9 +294,7 @@ void bch2_btree_trans_verify_locks(struct btree_trans *trans) ...@@ -294,9 +294,7 @@ void bch2_btree_trans_verify_locks(struct btree_trans *trans)
__flatten __flatten
static bool bch2_btree_iter_relock(struct btree_iter *iter, bool trace) static bool bch2_btree_iter_relock(struct btree_iter *iter, bool trace)
{ {
return iter->uptodate >= BTREE_ITER_NEED_RELOCK return btree_iter_get_locks(iter, false, trace);
? btree_iter_get_locks(iter, false, trace)
: true;
} }
bool __bch2_btree_iter_upgrade(struct btree_iter *iter, bool __bch2_btree_iter_upgrade(struct btree_iter *iter,
...@@ -1098,7 +1096,15 @@ static int btree_iter_traverse_one(struct btree_iter *iter) ...@@ -1098,7 +1096,15 @@ static int btree_iter_traverse_one(struct btree_iter *iter)
if (unlikely(iter->level >= BTREE_MAX_DEPTH)) if (unlikely(iter->level >= BTREE_MAX_DEPTH))
return 0; return 0;
if (bch2_btree_iter_relock(iter, false)) /*
* if we need interior nodes locked, call btree_iter_relock() to make
* sure we walk back up enough that we lock them:
*/
if (iter->uptodate == BTREE_ITER_NEED_RELOCK ||
iter->locks_want > 1)
bch2_btree_iter_relock(iter, false);
if (iter->uptodate < BTREE_ITER_NEED_RELOCK)
return 0; return 0;
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment