imsm: fix spare promotion
1/ Fix an off by one error when detecting whether the device allocation loop succeeded or not 2/ Update ->num_raid_devs before copying to avoid a segmentation fault Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
7cbeb80e90
commit
709743c554
|
@ -1499,18 +1499,17 @@ static int compare_super_imsm(struct supertype *st, struct supertype *tst)
|
|||
dv->next = first->devlist;
|
||||
first->devlist = dv;
|
||||
}
|
||||
if (i <= sec->anchor->num_raid_devs) {
|
||||
if (i < sec->anchor->num_raid_devs) {
|
||||
/* allocation failure */
|
||||
free_devlist(first);
|
||||
fprintf(stderr, "imsm: failed to associate spare\n");
|
||||
return 3;
|
||||
}
|
||||
for (i = 0; i < sec->anchor->num_raid_devs; i++)
|
||||
imsm_copy_dev(get_imsm_dev(first, i), get_imsm_dev(sec, i));
|
||||
|
||||
first->anchor->num_raid_devs = sec->anchor->num_raid_devs;
|
||||
first->anchor->orig_family_num = sec->anchor->orig_family_num;
|
||||
first->anchor->family_num = sec->anchor->family_num;
|
||||
for (i = 0; i < sec->anchor->num_raid_devs; i++)
|
||||
imsm_copy_dev(get_imsm_dev(first, i), get_imsm_dev(sec, i));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue