From: Adam Kwolek Date: Mon, 18 Apr 2011 00:31:06 +0000 (+1000) Subject: FIX: Fiddle raid_disks number when restarting reshape X-Git-Tag: mdadm-3.2.2~96 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=178b8f353c4b4ffdf3bd4cd8c9dde37f64097da8;p=thirdparty%2Fmdadm.git FIX: Fiddle raid_disks number when restarting reshape When restarting a reshape, the value of 'raid_disks' is the *new* value. The old value is found by subtracting delta_disks. So before calling analyse_change we must set raid_disks to be the old value, and then reset it afterwards. All other fields are cleanly separated with the main field being the 'old' value and a new_* field available. Signed-off-by: Adam Kwolek Signed-off-by: NeilBrown --- diff --git a/Grow.c b/Grow.c index 017a79db..9c1f096a 100644 --- a/Grow.c +++ b/Grow.c @@ -1676,8 +1676,10 @@ static int reshape_array(char *container, int fd, char *devname, if (info->reshape_active) { int new_level = info->new_level; info->new_level = UnSet; + info->array.raid_disks -= info->delta_disks; msg = analyse_change(info, &reshape); info->new_level = new_level; + info->array.raid_disks += info->delta_disks; if (!restart) /* Make sure the array isn't read-only */ ioctl(fd, RESTART_ARRAY_RW, 0);