diff options
author | NeilBrown <neilb@suse.de> | 2011-07-14 15:42:10 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2011-07-14 15:42:10 +1000 |
commit | ca0748fa494425dc025441a8622088126e25e61d (patch) | |
tree | b18e84604dbf7591e4f771aa44c2780ccce168d9 | |
parent | 19986c721c9ac4b353c8592998d70d0dc8860bfd (diff) | |
download | mdadm-ca0748fa494425dc025441a8622088126e25e61d.tar.gz |
imsm: getinfo_super_imsm_volume() doesn't fill all disk information
getinfo_super_imsm_volume doesn't correctly set info.disk fields
because it doesn't know which disk to set them from.
It should be the last disk passed to add_to_super.
So add a field 'current_disk' to record this disk in add_to_super, and
use it in getinfo_super.
This allows us to remove a hack in Create.c
Signed-off-by: NeilBrown <neilb@suse.de>
-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; } |