FIX: Do not unblock array accidentally
When sysfs_set_array() function is called, it tests if array can be configured using sysfs. Setting metadata_version entry can accidentally unblock mdmon when array is under reshape. To avoid this, blocking character '-' is checked and if is is set, it is used for array test. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
7050aa3f6b
commit
ddb12f6ca6
13
sysfs.c
13
sysfs.c
|
@ -541,8 +541,21 @@ int sysfs_set_array(struct mdinfo *info, int vers)
|
|||
ver[0] = 0;
|
||||
if (info->array.major_version == -1 &&
|
||||
info->array.minor_version == -2) {
|
||||
char buf[1024];
|
||||
|
||||
strcat(strcpy(ver, "external:"), info->text_version);
|
||||
|
||||
/* meta version might already be set if we are setting
|
||||
* new geometry for a reshape. In that case we don't
|
||||
* want to over-write the 'readonly' flag that is
|
||||
* stored in the metadata version. So read the current
|
||||
* version first, and preserve the flag
|
||||
*/
|
||||
if (sysfs_get_str(info, NULL, "metadata_version",
|
||||
buf, 1024) > 0)
|
||||
if (strlen(buf) >= 9 && buf[9] == '-')
|
||||
ver[9] = '-';
|
||||
|
||||
if ((vers % 100) < 2 ||
|
||||
sysfs_set_str(info, NULL, "metadata_version",
|
||||
ver) < 0) {
|
||||
|
|
Loading…
Reference in New Issue