diff options
-rw-r--r-- | fs/bcachefs/btree_iter.c | 9 | ||||
-rw-r--r-- | fs/bcachefs/btree_locking.h | 5 |
2 files changed, 11 insertions, 3 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 367231ab1980..523ca8cb0e01 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -2234,8 +2234,13 @@ struct bkey_s_c btree_trans_peek_key_cache(struct btree_iter *iter, struct bpos btree_iter_ip_allocated(iter)); ret = bch2_btree_path_traverse(trans, iter->key_cache_path, - iter->flags|BTREE_ITER_cached) ?: - bch2_btree_path_relock(trans, btree_iter_path(trans, iter), _THIS_IP_); + iter->flags|BTREE_ITER_cached); + if (unlikely(ret)) + return bkey_s_c_err(ret); + + BUG_ON(IS_ERR(trans->paths[iter->key_cache_path].l[0].b)); + + ret = bch2_btree_path_relock(trans, btree_iter_path(trans, iter), _THIS_IP_); if (unlikely(ret)) return bkey_s_c_err(ret); diff --git a/fs/bcachefs/btree_locking.h b/fs/bcachefs/btree_locking.h index b54ef48eb8cc..396d7a52ed86 100644 --- a/fs/bcachefs/btree_locking.h +++ b/fs/bcachefs/btree_locking.h @@ -408,7 +408,10 @@ static inline int bch2_btree_path_upgrade(struct btree_trans *trans, static inline void btree_path_set_should_be_locked(struct btree_trans *trans, struct btree_path *path) { - EBUG_ON(!btree_node_locked(path, path->level)); + if (!btree_node_locked(path, path->level)) + panic("trans %px path %px idx %zu err %s", + trans, path, path - trans->paths, + bch2_err_str(PTR_ERR_OR_ZERO(path->l[0].b))); EBUG_ON(path->uptodate); path->should_be_locked = true; |