Grow: don't try to use 'raid_disks' value for a container.

The 'raid_disks' for a container is zero, so subtracting it
from the given raid_disks to get delta_disks doesn't make sense.

Rather set delta_disks to UnSet and set raid_disks to the requested
number of disks.   This then gets passed to reshape_super() which
can use it as required.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2011-03-09 18:50:59 +11:00
parent 817ed7d6d6
commit eff4954d9a
1 changed files with 4 additions and 1 deletions

5
Grow.c
View File

@ -1506,7 +1506,10 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
info.component_size = size*2;
info.new_level = level;
info.new_chunk = chunksize * 1024;
if (raid_disks)
if (info.array.level == LEVEL_CONTAINER) {
info.delta_disks = UnSet;
info.array.raid_disks = raid_disks;
} else if (raid_disks)
info.delta_disks = raid_disks - info.array.raid_disks;
else
info.delta_disks = UnSet;