From: Adam Kwolek Date: Tue, 11 Jan 2011 14:04:19 +0000 (+0100) Subject: imsm: FIX: only one spare is passed in update X-Git-Tag: mdadm-3.2~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bbd24d86168c6a16ed99dc7a454262e6a9fd6930;p=thirdparty%2Fmdadm.git imsm: FIX: only one spare is passed in update Only one spare is passed in update. When more than one disk is added first spare is passed multiple times. Signed-off-by: Adam Kwolek Signed-off-by: NeilBrown --- diff --git a/super-intel.c b/super-intel.c index 5e048b35..a4a44976 100644 --- a/super-intel.c +++ b/super-intel.c @@ -6440,6 +6440,7 @@ static int imsm_create_metadata_update_for_reshape( struct mdinfo *spares = NULL; int i; int delta_disks = 0; + struct mdinfo *dev; dprintf("imsm_update_metadata_for_reshape(enter) raid_disks = %i\n", geo->raid_disks); @@ -6478,15 +6479,18 @@ static int imsm_create_metadata_update_for_reshape( dprintf("imsm: %i spares are available.\n\n", spares->array.spare_disks); + dev = spares->devs; for (i = 0; i < delta_disks; i++) { - struct mdinfo *dev = spares->devs; struct dl *dl; + if (dev == NULL) + break; u->new_disks[i] = makedev(dev->disk.major, dev->disk.minor); dl = get_disk_super(super, dev->disk.major, dev->disk.minor); dl->index = mpb->num_disks; mpb->num_disks++; + dev = dev->next; } /* Now update the metadata so that container_content will find * the new devices