diff options
-rw-r--r-- | Create.c | 9 | ||||
-rw-r--r-- | super-intel.c | 11 |
2 files changed, 6 insertions, 14 deletions
@@ -856,15 +856,6 @@ int Create(struct supertype *st, char *mddev, /* getinfo_super might have lost these ... */ inf->disk.major = major(stb.st_rdev); inf->disk.minor = minor(stb.st_rdev); - /* FIXME the following should not be needed - * as getinfo_super is suppose to set - * them. However it doesn't for imsm, - * so we have this hack for now - */ - if (st->ss == &super_imsm) { - inf->disk.number = dnum; - inf->disk.raid_disk = dnum; - } } break; case 2: diff --git a/super-intel.c b/super-intel.c index 70cf993..b5868e9 100644 --- a/super-intel.c +++ b/super-intel.c @@ -341,7 +341,7 @@ struct intel_super { struct extent *e; /* for determining freespace @ create */ int raiddisk; /* slot to fill in autolayout */ enum action action; - } *disks; + } *disks, *current_disk; struct dl *disk_mgmt_list; /* list of disks to add/remove while mdmon active */ struct dl *missing; /* disks removed while we weren't looking */ @@ -2201,7 +2201,7 @@ static void getinfo_super_imsm_volume(struct supertype *st, struct mdinfo *info, if (prev_map) map_to_analyse = prev_map; - dl = super->disks; + dl = super->current_disk; info->container_member = super->current_vol; info->array.raid_disks = map->num_members; @@ -2263,11 +2263,12 @@ static void getinfo_super_imsm_volume(struct supertype *st, struct mdinfo *info, info->new_chunk = info->array.chunk_size; info->delta_disks = 0; } - info->disk.major = 0; - info->disk.minor = 0; + if (dl) { info->disk.major = dl->major; info->disk.minor = dl->minor; + info->disk.number = dl->index; + info->disk.raid_disk = dl->index; } info->data_offset = __le32_to_cpu(map_to_analyse->pba_of_lba0); @@ -4349,7 +4350,7 @@ static int add_to_super_imsm_volume(struct supertype *st, mdu_disk_info_t *dk, mpb->family_num = __cpu_to_le32(sum); mpb->orig_family_num = mpb->family_num; } - + super->current_disk = dl; return 0; } |