From: Lukasz Dorau Date: Wed, 5 Oct 2011 03:17:38 +0000 (+1100) Subject: imsm: fix: correct adding and activation of spare disks X-Git-Tag: mdadm-3.2.3~135 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b303fe21b5ad9a239a2984649446fce060918571;p=thirdparty%2Fmdadm.git imsm: fix: correct adding and activation of spare disks During activation of spare disks, only one of all available spare disks can be activated at this moment. It causes that for example during take-over from RAID0 with 2 disks to RAID10, only one of two spare disks is taken for recovery and a degraded RAID10 array with only 3 of 4 working disks is created. It has been fixed by adding more than one of all available spare disks and saving them in additional_test_list which is passed to imsm_add_spare(). Signed-off-by: Lukasz Dorau Signed-off-by: NeilBrown --- diff --git a/super-intel.c b/super-intel.c index e761819c..ce067a2c 100644 --- a/super-intel.c +++ b/super-intel.c @@ -6671,9 +6671,9 @@ static struct mdinfo *imsm_activate_spare(struct active_array *a, */ dl = imsm_readd(super, i, a); if (!dl) - dl = imsm_add_spare(super, i, a, 0, NULL); + dl = imsm_add_spare(super, i, a, 0, rv); if (!dl) - dl = imsm_add_spare(super, i, a, 1, NULL); + dl = imsm_add_spare(super, i, a, 1, rv); if (!dl) continue; @@ -6710,8 +6710,6 @@ static struct mdinfo *imsm_activate_spare(struct active_array *a, num_spares++; dprintf("%x:%x to be %d at %llu\n", dl->major, dl->minor, i, di->data_offset); - - break; } if (!rv)