diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-07-24 19:45:22 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-07-24 19:46:11 -0400 |
commit | f54203ee094d33caa3a5ace73fbf840c3d47714f (patch) | |
tree | 72755f0b7a038fdaa90a05966946a4c4af79f920 | |
parent | febdce36feff781b3b0aacd7043b3453a56856b7 (diff) |
bcachefs: Fix locking in allocator thread
gc lock must be held while invalidating buckets - fixes
"1f7a95698e bcachefs: Invalidate buckets when writing to alloc btree"
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r-- | fs/bcachefs/alloc.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/bcachefs/alloc.c b/fs/bcachefs/alloc.c index 3f64ad84fdc0..a76103b5ce90 100644 --- a/fs/bcachefs/alloc.c +++ b/fs/bcachefs/alloc.c @@ -964,16 +964,21 @@ static int bch2_allocator_thread(void *arg) if (ret) goto stop; + down_read(&c->gc_lock); + ret = bch2_invalidate_buckets(c, ca); - if (ret) + if (ret) { + up_read(&c->gc_lock); goto stop; + } - if (!fifo_empty(&ca->free_inc)) + if (!fifo_empty(&ca->free_inc)) { + up_read(&c->gc_lock); continue; + } pr_debug("free_inc now empty"); - down_read(&c->gc_lock); do { if (test_bit(BCH_FS_GC_FAILURE, &c->flags)) { up_read(&c->gc_lock); |