imsm: fix up spare handling holdover in update_create_array
We used to leave SPARE_DISK unset to indicate it was available to be assimilated into other arrays. Now we explicitly check the size. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
8796fdc4cd
commit
e0783b419d
|
@ -2833,12 +2833,11 @@ static void imsm_process_update(struct supertype *st,
|
||||||
dev = update->space;
|
dev = update->space;
|
||||||
update->space = NULL;
|
update->space = NULL;
|
||||||
imsm_copy_dev(dev, &u->dev);
|
imsm_copy_dev(dev, &u->dev);
|
||||||
|
map = get_imsm_map(dev, 0);
|
||||||
super->dev_tbl[u->dev_idx] = dev;
|
super->dev_tbl[u->dev_idx] = dev;
|
||||||
mpb->num_raid_devs++;
|
mpb->num_raid_devs++;
|
||||||
|
|
||||||
/* fix up flags, if arrays overlap then the drives can not be
|
/* fix up flags */
|
||||||
* spares
|
|
||||||
*/
|
|
||||||
for (i = 0; i < map->num_members; i++) {
|
for (i = 0; i < map->num_members; i++) {
|
||||||
struct imsm_disk *disk;
|
struct imsm_disk *disk;
|
||||||
__u32 status;
|
__u32 status;
|
||||||
|
@ -2846,8 +2845,7 @@ static void imsm_process_update(struct supertype *st,
|
||||||
disk = get_imsm_disk(super, get_imsm_disk_idx(map, i));
|
disk = get_imsm_disk(super, get_imsm_disk_idx(map, i));
|
||||||
status = __le32_to_cpu(disk->status);
|
status = __le32_to_cpu(disk->status);
|
||||||
status |= CONFIGURED_DISK;
|
status |= CONFIGURED_DISK;
|
||||||
if (overlap)
|
status &= ~SPARE_DISK;
|
||||||
status &= ~SPARE_DISK;
|
|
||||||
disk->status = __cpu_to_le32(status);
|
disk->status = __cpu_to_le32(status);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue