diff --git a/fs/bcachefs/sb-members.c b/fs/bcachefs/sb-members.c index 2aad62961938..02bcde3c1b02 100644 --- a/fs/bcachefs/sb-members.c +++ b/fs/bcachefs/sb-members.c @@ -478,11 +478,15 @@ unsigned bch2_sb_nr_devices(const struct bch_sb *sb) int bch2_sb_member_alloc(struct bch_fs *c) { unsigned dev_idx = c->sb.nr_devices; + struct bch_sb_field_members_v2 *mi; + unsigned nr_devices; + unsigned u64s; + int best = -1; + u64 best_last_mount = 0; + if (dev_idx < BCH_SB_MEMBERS_MAX) goto have_slot; - int best = -1; - u64 best_last_mount = 0; for (dev_idx = 0; dev_idx < BCH_SB_MEMBERS_MAX; dev_idx++) { /* eventually BCH_SB_MEMBERS_MAX will be raised */ if (dev_idx == BCH_SB_MEMBER_INVALID) @@ -505,11 +509,11 @@ int bch2_sb_member_alloc(struct bch_fs *c) return -BCH_ERR_ENOSPC_sb_members; have_slot: - unsigned nr_devices = max_t(unsigned, dev_idx + 1, c->sb.nr_devices); + nr_devices = max_t(unsigned, dev_idx + 1, c->sb.nr_devices); - struct bch_sb_field_members_v2 *mi = bch2_sb_field_get(c->disk_sb.sb, members_v2); - unsigned u64s = DIV_ROUND_UP(sizeof(struct bch_sb_field_members_v2) + - le16_to_cpu(mi->member_bytes) * nr_devices, sizeof(u64)); + mi = bch2_sb_field_get(c->disk_sb.sb, members_v2); + u64s = DIV_ROUND_UP(sizeof(struct bch_sb_field_members_v2) + + le16_to_cpu(mi->member_bytes) * nr_devices, sizeof(u64)); mi = bch2_sb_field_resize(&c->disk_sb, members_v2, u64s); if (!mi)