From: Kent Overstreet Date: Wed, 30 Mar 2022 17:47:07 +0000 (-0400) Subject: bcachefs: btree_path_make_mut() clears should_be_locked X-Git-Tag: v6.7-rc1~201^2~1041 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d864842581e70d2280f2a51ceb2ad6e7cefeed94;p=thirdparty%2Fkernel%2Flinux.git bcachefs: btree_path_make_mut() clears should_be_locked This fixes a bug where __bch2_btree_node_update_key() wasn't clearing should_be_locked, leading to bch2_btree_path_traverse() always failing - all callers of btree_path_make_mut() want should_be_locked cleared, so do it there. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index bfba10b1c1277..3a4ed2f70cc21 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -1662,9 +1662,8 @@ static struct btree_path *btree_path_clone(struct btree_trans *trans, struct btr return new; } -struct btree_path * __must_check -__bch2_btree_path_make_mut(struct btree_trans *trans, - struct btree_path *path, bool intent) +struct btree_path *__bch2_btree_path_make_mut(struct btree_trans *trans, + struct btree_path *path, bool intent) { __btree_path_put(path, intent); path = btree_path_clone(trans, path, intent); @@ -1672,6 +1671,7 @@ __bch2_btree_path_make_mut(struct btree_trans *trans, #ifdef CONFIG_BCACHEFS_DEBUG path->ip_allocated = _RET_IP_; #endif + path->should_be_locked = false; return path; } @@ -1688,7 +1688,6 @@ __bch2_btree_path_set_pos(struct btree_trans *trans, path = bch2_btree_path_make_mut(trans, path, intent); path->pos = new_pos; - path->should_be_locked = false; trans->paths_sorted = false; if (unlikely(path->cached)) { diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h index 30a2a2cef29bc..29c1df83b35eb 100644 --- a/fs/bcachefs/btree_iter.h +++ b/fs/bcachefs/btree_iter.h @@ -149,6 +149,7 @@ bch2_btree_path_make_mut(struct btree_trans *trans, { if (path->ref > 1 || path->preserve) path = __bch2_btree_path_make_mut(trans, path, intent); + path->should_be_locked = false; return path; }