summaryrefslogtreecommitdiff
path: root/super-intel.c
diff options
context:
space:
mode:
authorAdam Kwolek <adam.kwolek@intel.com>2010-12-15 10:38:15 +0100
committerNeilBrown <neilb@suse.de>2010-12-16 09:03:03 +1100
commit6c932028981f82b69044214623d5175ebd06d8fa (patch)
tree32079e710522d82c4d1516e54d1d25439f8f24a6 /super-intel.c
parent44d337f04d35321084b4e309b4d68cf828bf7ec8 (diff)
imsm: FIX: imsm_add_spare() wrongly tests spares list
For more than one disk tested additional_test_list was searched from last point, not from begin. This bug causes that more than 2 disks cannot be added to imsm array, when imsm_add_spare() is used for this. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'super-intel.c')
-rw-r--r--super-intel.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/super-intel.c b/super-intel.c
index 2a23f1b4..2be24a9e 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -5034,6 +5034,7 @@ static struct dl *imsm_add_spare(struct intel_super *super, int slot,
__u32 array_start = 0;
__u32 array_end = 0;
struct dl *dl;
+ struct mdinfo *test_list;
for (dl = super->disks; dl; dl = dl->next) {
/* If in this array, skip */
@@ -5047,16 +5048,17 @@ static struct dl *imsm_add_spare(struct intel_super *super, int slot,
}
if (d)
continue;
- while (additional_test_list) {
- if (additional_test_list->disk.major == dl->major &&
- additional_test_list->disk.minor == dl->minor) {
+ test_list = additional_test_list;
+ while (test_list) {
+ if (test_list->disk.major == dl->major &&
+ test_list->disk.minor == dl->minor) {
dprintf("%x:%x already in additional test list\n",
dl->major, dl->minor);
break;
}
- additional_test_list = additional_test_list->next;
+ test_list = test_list->next;
}
- if (additional_test_list)
+ if (test_list)
continue;
/* skip in use or failed drives */