diff options
author | Adam Kwolek <adam.kwolek@intel.com> | 2010-12-15 10:38:15 +0100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2010-12-16 09:03:03 +1100 |
commit | 6c932028981f82b69044214623d5175ebd06d8fa (patch) | |
tree | 32079e710522d82c4d1516e54d1d25439f8f24a6 /super-intel.c | |
parent | 44d337f04d35321084b4e309b4d68cf828bf7ec8 (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.c | 12 |
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 */ |