summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2017-12-22 23:07:15 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2018-05-22 00:44:18 -0400
commit972b1a1113e09f48e01303a2fed688bb357682e6 (patch)
tree1aafabac6bf39adec643570bd064cdfb4d4d06c9
parentd3cba36448cf3b7dfbb51e7063a350783f305fd5 (diff)
bcachefs: fix stupid locking bugs
-rw-r--r--fs/bcachefs/buckets.c8
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;