summaryrefslogtreecommitdiffstats
path: root/super-intel.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2008-09-15 20:55:40 -0700
committerDan Williams <dan.j.williams@intel.com>2008-09-15 20:55:40 -0700
commite0783b419d674815e548960167dd02952900c4a6 (patch)
treeb2cd6286d9ea7e3311b5112322928a8b66ab8186 /super-intel.c
parent8796fdc4cda2fdc4b1359e51388f7bc49e790c68 (diff)
downloadmdadm-e0783b419d674815e548960167dd02952900c4a6.tar.gz
mdadm-e0783b419d674815e548960167dd02952900c4a6.tar.xz
mdadm-e0783b419d674815e548960167dd02952900c4a6.zip
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>
Diffstat (limited to 'super-intel.c')
-rw-r--r--super-intel.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/super-intel.c b/super-intel.c
index e54871a..b4bcb28 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -2833,12 +2833,11 @@ static void imsm_process_update(struct supertype *st,
dev = update->space;
update->space = NULL;
imsm_copy_dev(dev, &u->dev);
+ map = get_imsm_map(dev, 0);
super->dev_tbl[u->dev_idx] = dev;
mpb->num_raid_devs++;
- /* fix up flags, if arrays overlap then the drives can not be
- * spares
- */
+ /* fix up flags */
for (i = 0; i < map->num_members; i++) {
struct imsm_disk *disk;
__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));
status = __le32_to_cpu(disk->status);
status |= CONFIGURED_DISK;
- if (overlap)
- status &= ~SPARE_DISK;
+ status &= ~SPARE_DISK;
disk->status = __cpu_to_le32(status);
}
break;