From: Kent Overstreet Date: Sat, 10 May 2025 17:24:25 +0000 (-0400) Subject: bcachefs: Slim down inlined part of bch2_btree_path_upgrade() X-Git-Tag: v6.16-rc1~211^2~76 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b51b4055c3cd516cba9e0aee3d8ecfba1d75c047;p=thirdparty%2Flinux.git bcachefs: Slim down inlined part of bch2_btree_path_upgrade() Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c index baa505a9a7064..448613be90ba4 100644 --- a/fs/bcachefs/btree_locking.c +++ b/fs/bcachefs/btree_locking.c @@ -618,22 +618,22 @@ bool bch2_btree_path_upgrade_noupgrade_sibs(struct btree_trans *trans, unsigned new_locks_want, struct get_locks_fail *f) { - EBUG_ON(path->locks_want >= new_locks_want); - - path->locks_want = new_locks_want; + path->locks_want = max_t(unsigned, path->locks_want, new_locks_want); bool ret = btree_path_get_locks(trans, path, true, f); bch2_trans_verify_locks(trans); return ret; } -bool __bch2_btree_path_upgrade(struct btree_trans *trans, - struct btree_path *path, - unsigned new_locks_want, - struct get_locks_fail *f) +int __bch2_btree_path_upgrade(struct btree_trans *trans, + struct btree_path *path, + unsigned new_locks_want) { - bool ret = bch2_btree_path_upgrade_noupgrade_sibs(trans, path, new_locks_want, f); - if (ret) + struct get_locks_fail f = {}; + unsigned old_locks_want = path->locks_want; + int ret = 0; + + if (bch2_btree_path_upgrade_noupgrade_sibs(trans, path, new_locks_want, &f)) goto out; /* @@ -668,6 +668,10 @@ bool __bch2_btree_path_upgrade(struct btree_trans *trans, btree_path_get_locks(trans, linked, true, NULL); } } + + trace_and_count(trans->c, trans_restart_upgrade, trans, _THIS_IP_, path, + old_locks_want, new_locks_want, &f); + ret = btree_trans_restart(trans, BCH_ERR_transaction_restart_upgrade); out: bch2_trans_verify_locks(trans); return ret; diff --git a/fs/bcachefs/btree_locking.h b/fs/bcachefs/btree_locking.h index 66b27c0853a5c..59000d0dabeac 100644 --- a/fs/bcachefs/btree_locking.h +++ b/fs/bcachefs/btree_locking.h @@ -380,27 +380,18 @@ bool bch2_btree_path_upgrade_noupgrade_sibs(struct btree_trans *, struct btree_path *, unsigned, struct get_locks_fail *); -bool __bch2_btree_path_upgrade(struct btree_trans *, - struct btree_path *, unsigned, - struct get_locks_fail *); +int __bch2_btree_path_upgrade(struct btree_trans *, + struct btree_path *, unsigned); static inline int bch2_btree_path_upgrade(struct btree_trans *trans, struct btree_path *path, unsigned new_locks_want) { - struct get_locks_fail f = {}; - unsigned old_locks_want = path->locks_want; - new_locks_want = min(new_locks_want, BTREE_MAX_DEPTH); - if (path->locks_want < new_locks_want - ? __bch2_btree_path_upgrade(trans, path, new_locks_want, &f) - : path->nodes_locked) - return 0; - - trace_and_count(trans->c, trans_restart_upgrade, trans, _THIS_IP_, path, - old_locks_want, new_locks_want, &f); - return btree_trans_restart(trans, BCH_ERR_transaction_restart_upgrade); + return likely(path->locks_want >= new_locks_want && path->nodes_locked) + ? 0 + : __bch2_btree_path_upgrade(trans, path, new_locks_want); } /* misc: */