diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-12-22 23:07:15 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-05-22 00:44:18 -0400 |
commit | 972b1a1113e09f48e01303a2fed688bb357682e6 (patch) | |
tree | 1aafabac6bf39adec643570bd064cdfb4d4d06c9 | |
parent | d3cba36448cf3b7dfbb51e7063a350783f305fd5 (diff) |
bcachefs: fix stupid locking bugs
-rw-r--r-- | fs/bcachefs/buckets.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/bcachefs/buckets.c b/fs/bcachefs/buckets.c index f0a63232093a..555fd969d1de 100644 --- a/fs/bcachefs/buckets.c +++ b/fs/bcachefs/buckets.c @@ -348,8 +348,10 @@ bool bch2_invalidate_bucket(struct bch_fs *c, struct bch_dev *ca, lg_local_lock(&c->usage_lock); *old = bucket_data_cmpxchg(c, ca, g, new, ({ - if (!is_available_bucket(new)) + if (!is_available_bucket(new)) { + lg_local_unlock(&c->usage_lock); return false; + } new.owned_by_allocator = 1; new.touched_this_mount = 1; @@ -374,8 +376,10 @@ bool bch2_mark_alloc_bucket_startup(struct bch_fs *c, struct bch_dev *ca, lg_local_lock(&c->usage_lock); old = bucket_data_cmpxchg(c, ca, g, new, ({ if (new.touched_this_mount || - !is_available_bucket(new)) + !is_available_bucket(new)) { + lg_local_unlock(&c->usage_lock); return false; + } new.owned_by_allocator = 1; new.touched_this_mount = 1; |