FIX: Respect metadata size limitations

When reshape_super() updates metadata with new size, due to some metadata
limitations saved value can be different than requested value by user.
Update size (read it from metadata) for setting it in md.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Adam Kwolek 2012-04-13 16:52:02 +02:00 committed by NeilBrown
parent 44f6f18113
commit 7e7e9a4d72
1 changed files with 21 additions and 0 deletions

21
Grow.c
View File

@ -1637,6 +1637,27 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
goto release;
}
sync_metadata(st);
if (st->ss->external) {
/* metadata can have size limitation
* update size value according to metadata information
*/
struct mdinfo *sizeinfo =
st->ss->container_content(st, subarray);
if (sizeinfo) {
unsigned long long new_size =
sizeinfo->custom_array_size/2;
int data_disks = get_data_disks(
sizeinfo->array.level,
sizeinfo->array.layout,
sizeinfo->array.raid_disks);
new_size /= data_disks;
dprintf("Metadata size correction from %llu to "
"%llu (%llu)\n", orig_size, new_size,
new_size * data_disks);
size = new_size;
sysfs_free(sizeinfo);
}
}
/* Update the size of each member device in case
* they have been resized. This will never reduce