summaryrefslogtreecommitdiff
path: root/libbcachefs/super.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-05-07 23:48:50 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-05-14 14:58:07 -0400
commitbf145974607928c32c14d27c5c57e1220cad195d (patch)
tree7016db61efb29e8b1d0ab321552d13bd713cd29d /libbcachefs/super.c
parent7942d5cab4f02bd4db12ee26a792a6012b4d7b07 (diff)
Update bcachefs sources to b6d5426551 bcachefs: Fix bch2_btree_iter_peek_with_updates()
Diffstat (limited to 'libbcachefs/super.c')
-rw-r--r--libbcachefs/super.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/libbcachefs/super.c b/libbcachefs/super.c
index bbd313a4..e5936041 100644
--- a/libbcachefs/super.c
+++ b/libbcachefs/super.c
@@ -627,9 +627,11 @@ static const char *bch2_fs_online(struct bch_fs *c)
down_write(&c->state_lock);
err = "error creating sysfs objects";
- __for_each_member_device(ca, c, i, NULL)
- if (bch2_dev_sysfs_online(c, ca))
+ for_each_member_device(ca, c, i)
+ if (bch2_dev_sysfs_online(c, ca)) {
+ percpu_ref_put(&ca->ref);
goto err;
+ }
list_add(&c->list, &bch_fs_list);
err = NULL;
@@ -1841,12 +1843,14 @@ struct bch_dev *bch2_dev_lookup(struct bch_fs *c, const char *path)
if (ret)
return ERR_PTR(ret);
- for_each_member_device(ca, c, i)
+ rcu_read_lock();
+ for_each_member_device_rcu(ca, c, i, NULL)
if (ca->disk_sb.bdev->bd_dev == dev)
goto found;
-
ca = ERR_PTR(-ENOENT);
found:
+ rcu_read_unlock();
+
return ca;
}