]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
imsm: FIX: only one spare is passed in update
authorAdam Kwolek <adam.kwolek@intel.com>
Tue, 11 Jan 2011 14:04:19 +0000 (15:04 +0100)
committerNeilBrown <neilb@suse.de>
Wed, 12 Jan 2011 05:46:38 +0000 (16:46 +1100)
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 <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
super-intel.c

index 5e048b356a6c0e98b7ab28873b9fdac8ccae09b3..a4a44976ebf83988835888f6a98ddde943d4ad77 100644 (file)
@@ -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