Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34817e8c authored by NeilBrown's avatar NeilBrown
Browse files

md: make sure new_level, new_chunksize, new_layout always have sensible values.



When an md array is undergoing a change, we have new_* fields that
show the new values.
When no change is happening, it is least confusing if these have
the same value as the normal fields.
This is true in most cases, but not when the values are set via sysfs.

So fix this up.

A subsequent patch will BUG_ON if these things aren't consistent.


Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 67cc2b81
Loading
Loading
Loading
Loading
+10 −7
Original line number Original line Diff line number Diff line
@@ -2633,9 +2633,9 @@ layout_store(mddev_t *mddev, const char *buf, size_t len)


	if (mddev->pers)
	if (mddev->pers)
		return -EBUSY;
		return -EBUSY;
	if (mddev->reshape_position != MaxSector)

	mddev->new_layout = n;
	mddev->new_layout = n;
	else
	if (mddev->reshape_position == MaxSector)
		mddev->layout = n;
		mddev->layout = n;
	return len;
	return len;
}
}
@@ -2702,9 +2702,9 @@ chunk_size_store(mddev_t *mddev, const char *buf, size_t len)


	if (mddev->pers)
	if (mddev->pers)
		return -EBUSY;
		return -EBUSY;
	else if (mddev->reshape_position != MaxSector)

	mddev->new_chunk = n;
	mddev->new_chunk = n;
	else
	if (mddev->reshape_position == MaxSector)
		mddev->chunk_size = n;
		mddev->chunk_size = n;
	return len;
	return len;
}
}
@@ -3831,7 +3831,10 @@ static int do_md_run(mddev_t * mddev)
	}
	}
	mddev->pers = pers;
	mddev->pers = pers;
	spin_unlock(&pers_lock);
	spin_unlock(&pers_lock);
	if (mddev->level != pers->level) {
		mddev->level = pers->level;
		mddev->level = pers->level;
		mddev->new_level = pers->level;
	}
	strlcpy(mddev->clevel, pers->name, sizeof(mddev->clevel));
	strlcpy(mddev->clevel, pers->name, sizeof(mddev->clevel));


	if (pers->level >= 4 && pers->level <= 6)
	if (pers->level >= 4 && pers->level <= 6)