From 053dbb377dd2874942a1ca8517d454f35916a782 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Mon, 11 Feb 2019 19:04:40 -0500 Subject: [PATCH] bcachefs: Fix a locking bug Signed-off-by: Kent Overstreet --- fs/bcachefs/alloc_background.c | 1 + fs/bcachefs/btree_update_leaf.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c index c44e0417af87c..34c1de63e43b8 100644 --- a/fs/bcachefs/alloc_background.c +++ b/fs/bcachefs/alloc_background.c @@ -883,6 +883,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 e052a3debadb4..d1a2ac48ed29b 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -624,6 +624,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) -- 2.30.2