mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 07:59:42 -04:00
bcachefs: btree_node_locked_type_nowrite()
Small helper to improve locking assertions. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
@@ -877,14 +877,11 @@ void __bch2_btree_path_verify_locks(struct btree_path *path)
|
||||
|
||||
for (unsigned l = 0; l < BTREE_MAX_DEPTH; l++) {
|
||||
int want = btree_lock_want(path, l);
|
||||
int have = btree_node_locked_type(path, l);
|
||||
int have = btree_node_locked_type_nowrite(path, l);
|
||||
|
||||
BUG_ON(!is_btree_node(path, l) && have != BTREE_NODE_UNLOCKED);
|
||||
|
||||
BUG_ON(is_btree_node(path, l) &&
|
||||
(want == BTREE_NODE_UNLOCKED ||
|
||||
have != BTREE_NODE_WRITE_LOCKED) &&
|
||||
want != have);
|
||||
BUG_ON(is_btree_node(path, l) && want != have);
|
||||
|
||||
BUG_ON(btree_node_locked(path, l) &&
|
||||
path->l[l].lock_seq != six_lock_seq(&path->l[l].b->c.lock));
|
||||
|
||||
@@ -43,6 +43,15 @@ static inline int btree_node_locked_type(struct btree_path *path,
|
||||
return BTREE_NODE_UNLOCKED + ((path->nodes_locked >> (level << 1)) & 3);
|
||||
}
|
||||
|
||||
static inline int btree_node_locked_type_nowrite(struct btree_path *path,
|
||||
unsigned level)
|
||||
{
|
||||
int have = btree_node_locked_type(path, level);
|
||||
return have == BTREE_NODE_WRITE_LOCKED
|
||||
? BTREE_NODE_INTENT_LOCKED
|
||||
: have;
|
||||
}
|
||||
|
||||
static inline bool btree_node_write_locked(struct btree_path *path, unsigned l)
|
||||
{
|
||||
return btree_node_locked_type(path, l) == BTREE_NODE_WRITE_LOCKED;
|
||||
@@ -366,8 +375,8 @@ static inline bool bch2_btree_node_relock_notrace(struct btree_trans *trans,
|
||||
struct btree_path *path, unsigned level)
|
||||
{
|
||||
EBUG_ON(btree_node_locked(path, level) &&
|
||||
!btree_node_write_locked(path, level) &&
|
||||
btree_node_locked_type(path, level) != __btree_lock_want(path, level));
|
||||
btree_node_locked_type_nowrite(path, level) !=
|
||||
__btree_lock_want(path, level));
|
||||
|
||||
return likely(btree_node_locked(path, level)) ||
|
||||
(!IS_ERR_OR_NULL(path->l[level].b) &&
|
||||
|
||||
Reference in New Issue
Block a user