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:
Adam Kwolek 2011-09-21 11:55:08 +10:00 committed by NeilBrown
parent 7050aa3f6b
commit ddb12f6ca6
1 changed files with 13 additions and 0 deletions

13
sysfs.c
View File

@ -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) {