summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-02-11 19:04:40 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2019-04-03 12:44:06 -0400
commit24202878691a0bd482ae770cadbf1da4fe73b089 (patch)
tree72fe71f2bda5c265ae5154b6c4889927a7f6fcb3
parentbf55d426aaf035ba15e9ca0be286c4945e8c9864 (diff)
bcachefs: Fix a locking bug
-rw-r--r--fs/bcachefs/alloc_background.c1
-rw-r--r--fs/bcachefs/btree_update_leaf.c3
2 files changed, 4 insertions, 0 deletions
diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c
index ce42202fdd14..d7bfe67c20ea 100644
--- a/fs/bcachefs/alloc_background.c
+++ b/fs/bcachefs/alloc_background.c
@@ -882,6 +882,7 @@ static int bch2_invalidate_buckets(struct bch_fs *c, struct bch_dev *ca)
ret = __bch2_alloc_write_key(c, ca, b, &iter,
must_flush ? &journal_seq : NULL,
+ BTREE_INSERT_GC_LOCK_HELD|
!fifo_empty(&ca->free_inc) ? BTREE_INSERT_NOWAIT : 0);
}
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c
index 0df894fcf1ae..fda2fb51d50c 100644
--- a/fs/bcachefs/btree_update_leaf.c
+++ b/fs/bcachefs/btree_update_leaf.c
@@ -623,6 +623,9 @@ int __bch2_btree_insert_at(struct btree_insert *trans)
/* for the sake of sanity: */
BUG_ON(trans->nr > 1 && !(trans->flags & BTREE_INSERT_ATOMIC));
+ if (trans->flags & BTREE_INSERT_GC_LOCK_HELD)
+ lockdep_assert_held(&c->gc_lock);
+
bubble_sort(trans->entries, trans->nr, btree_trans_cmp);
trans_for_each_entry(trans, i)