aboutsummaryrefslogtreecommitdiff
path: root/fs/bcachefs/btree_locking.c
diff options
context:
space:
mode:
authorGravatar Kent Overstreet <kent.overstreet@linux.dev> 2024-04-09 20:14:21 -0400
committerGravatar Kent Overstreet <kent.overstreet@linux.dev> 2024-05-08 17:29:19 -0400
commitfd104e2967b766f1151b4c58daa67cbde620b376 (patch)
tree4ca9502853cee2b36e5b92cd96ddf33654b55f4b /fs/bcachefs/btree_locking.c
parentbcachefs: bch2_btree_path_can_relock() (diff)
downloadlinux-fd104e2967b766f1151b4c58daa67cbde620b376.tar.gz
linux-fd104e2967b766f1151b4c58daa67cbde620b376.tar.bz2
linux-fd104e2967b766f1151b4c58daa67cbde620b376.zip
bcachefs: bch2_trans_verify_not_unlocked()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/btree_locking.c')
-rw-r--r--fs/bcachefs/btree_locking.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c
index 7824a7a2e50f..c3e9b0cc7bbd 100644
--- a/fs/bcachefs/btree_locking.c
+++ b/fs/bcachefs/btree_locking.c
@@ -773,14 +773,16 @@ out:
static inline int __bch2_trans_relock(struct btree_trans *trans, bool trace)
{
- struct btree_path *path;
- unsigned i;
+ bch2_trans_verify_locks(trans);
if (unlikely(trans->restarted))
return -((int) trans->restarted);
if (unlikely(trans->locked))
goto out;
+ struct btree_path *path;
+ unsigned i;
+
trans_for_each_path(trans, path, i) {
struct get_locks_fail f;
@@ -881,6 +883,11 @@ static bool bch2_trans_locked(struct btree_trans *trans)
void bch2_trans_verify_locks(struct btree_trans *trans)
{
+ if (!trans->locked) {
+ BUG_ON(bch2_trans_locked(trans));
+ return;
+ }
+
struct btree_path *path;
unsigned i;