summaryrefslogtreecommitdiffstats
path: root/fs/bcachefs/btree_locking.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-01-24 00:26:48 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:09:49 -0400
commit313816363a843f1b812ae9190f6dcb4c49145057 (patch)
treede60c774b89ff0a313ea6cf34ee936fe54081825 /fs/bcachefs/btree_locking.c
parentee2c6ea7760eceee3051ef2f2046d16dc5ab06ec (diff)
downloadlinux-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.c15
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;