Skip to content

Commit

Permalink
bcachefs: bch2_trans_relock() is trylock for lockdep
Browse files Browse the repository at this point in the history
fix some spurious lockdep splats

Reported-by: syzbot+e088be3c2d5c05aaac35@syzkaller.appspotmail.com
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
  • Loading branch information
Kent Overstreet committed Nov 29, 2024
1 parent 615e3a8 commit c1e3758
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 7 deletions.
8 changes: 4 additions & 4 deletions fs/bcachefs/btree_iter.c
Original file line number Diff line number Diff line change
Expand Up @@ -1007,7 +1007,7 @@ static int bch2_btree_path_traverse_all(struct btree_trans *trans)

bch2_trans_unlock(trans);
cond_resched();
trans_set_locked(trans);
trans_set_locked(trans, false);

if (unlikely(trans->memory_allocation_failure)) {
struct closure cl;
Expand Down Expand Up @@ -3248,7 +3248,7 @@ u32 bch2_trans_begin(struct btree_trans *trans)

trans->last_begin_ip = _RET_IP_;

trans_set_locked(trans);
trans_set_locked(trans, false);

if (trans->restarted) {
bch2_btree_path_traverse_all(trans);
Expand Down Expand Up @@ -3354,7 +3354,7 @@ struct btree_trans *__bch2_trans_get(struct bch_fs *c, unsigned fn_idx)
trans->srcu_idx = srcu_read_lock(&c->btree_trans_barrier);
trans->srcu_lock_time = jiffies;
trans->srcu_held = true;
trans_set_locked(trans);
trans_set_locked(trans, false);

closure_init_stack_release(&trans->ref);
return trans;
Expand Down Expand Up @@ -3622,7 +3622,7 @@ int bch2_fs_btree_iter_init(struct bch_fs *c)
#ifdef CONFIG_LOCKDEP
fs_reclaim_acquire(GFP_KERNEL);
struct btree_trans *trans = bch2_trans_get(c);
trans_set_locked(trans);
trans_set_locked(trans, false);
bch2_trans_put(trans);
fs_reclaim_release(GFP_KERNEL);
#endif
Expand Down
2 changes: 1 addition & 1 deletion fs/bcachefs/btree_locking.c
Original file line number Diff line number Diff line change
Expand Up @@ -782,7 +782,7 @@ static inline int __bch2_trans_relock(struct btree_trans *trans, bool trace)
return bch2_trans_relock_fail(trans, path, &f, trace);
}

trans_set_locked(trans);
trans_set_locked(trans, true);
out:
bch2_trans_verify_locks(trans);
return 0;
Expand Down
4 changes: 2 additions & 2 deletions fs/bcachefs/btree_locking.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,10 @@ int bch2_six_check_for_deadlock(struct six_lock *lock, void *p);

/* lock: */

static inline void trans_set_locked(struct btree_trans *trans)
static inline void trans_set_locked(struct btree_trans *trans, bool try)
{
if (!trans->locked) {
lock_acquire_exclusive(&trans->dep_map, 0, 0, NULL, _THIS_IP_);
lock_acquire_exclusive(&trans->dep_map, 0, try, NULL, _THIS_IP_);
trans->locked = true;
trans->last_unlock_ip = 0;

Expand Down

0 comments on commit c1e3758

Please sign in to comment.