diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-01-24 00:26:48 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:49 -0400 |
commit | 313816363a843f1b812ae9190f6dcb4c49145057 (patch) | |
tree | de60c774b89ff0a313ea6cf34ee936fe54081825 /fs/bcachefs/btree_locking.c | |
parent | ee2c6ea7760eceee3051ef2f2046d16dc5ab06ec (diff) | |
download | linux-313816363a843f1b812ae9190f6dcb4c49145057.tar.gz linux-313816363a843f1b812ae9190f6dcb4c49145057.tar.bz2 linux-313816363a843f1b812ae9190f6dcb4c49145057.zip |
bcachefs: bch2_trans_relock_notrace()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/btree_locking.c')
-rw-r--r-- | fs/bcachefs/btree_locking.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c index 9d4be3c9cfd7..e7659b4cf9e4 100644 --- a/fs/bcachefs/btree_locking.c +++ b/fs/bcachefs/btree_locking.c @@ -691,6 +691,21 @@ int bch2_trans_relock(struct btree_trans *trans) return 0; } +int bch2_trans_relock_notrace(struct btree_trans *trans) +{ + struct btree_path *path; + + if (unlikely(trans->restarted)) + return -((int) trans->restarted); + + trans_for_each_path(trans, path) + if (path->should_be_locked && + !bch2_btree_path_relock_norestart(trans, path, _RET_IP_)) { + return btree_trans_restart(trans, BCH_ERR_transaction_restart_relock); + } + return 0; +} + void bch2_trans_unlock(struct btree_trans *trans) { struct btree_path *path; |