diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-05-07 23:48:50 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2021-05-14 14:58:07 -0400 |
commit | bf145974607928c32c14d27c5c57e1220cad195d (patch) | |
tree | 7016db61efb29e8b1d0ab321552d13bd713cd29d /libbcachefs/super.c | |
parent | 7942d5cab4f02bd4db12ee26a792a6012b4d7b07 (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.c | 12 |
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; } |