Commit e2699274 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: Fix __bch2_dev_group_set()



bch2_sb_disk_groups_to_cpu() goes off of the superblock member info, so
we need to set that first.

Reported-by: default avatarStijn Tintel <stijn@linux-ipv6.be>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent e660d7ca
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -470,23 +470,22 @@ void bch2_disk_path_to_text_sb(struct printbuf *out, struct bch_sb *sb, unsigned

int __bch2_dev_group_set(struct bch_fs *c, struct bch_dev *ca, const char *name)
{
	struct bch_member *mi;
	int ret, v = -1;
	lockdep_assert_held(&c->sb_lock);

	if (!strlen(name) || !strcmp(name, "none"))
		return 0;

	v = bch2_disk_path_find_or_create(&c->disk_sb, name);
	if (!strlen(name) || !strcmp(name, "none")) {
		struct bch_member *mi = bch2_members_v2_get_mut(c->disk_sb.sb, ca->dev_idx);
		SET_BCH_MEMBER_GROUP(mi, 0);
	} else {
		int v = bch2_disk_path_find_or_create(&c->disk_sb, name);
		if (v < 0)
			return v;

	ret = bch2_sb_disk_groups_to_cpu(c);
	if (ret)
		return ret;

	mi = bch2_members_v2_get_mut(c->disk_sb.sb, ca->dev_idx);
		struct bch_member *mi = bch2_members_v2_get_mut(c->disk_sb.sb, ca->dev_idx);
		SET_BCH_MEMBER_GROUP(mi, v + 1);
	return 0;
	}

	return bch2_sb_disk_groups_to_cpu(c);
}

int bch2_dev_group_set(struct bch_fs *c, struct bch_dev *ca, const char *name)