diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-01-19 17:04:46 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-01-19 21:43:14 -0500 |
commit | 63db187a577599ddcbf569f905c930b2a52d063e (patch) | |
tree | 145e15899bafa45b0d50a280c2c499ac561f51b5 | |
parent | cb4af57eb5a0046c43df9141f8f0cc7aed9f49c0 (diff) |
locking debugbcachefs-2025-01-20
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-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; |