diff --git a/Detail.c b/Detail.c index 3e61e37..24fa462 100644 --- a/Detail.c +++ b/Detail.c @@ -623,7 +623,7 @@ This is pretty boring free_mdstat(ms); if (st && st->sb) - st->ss->detail_super(st, c->homehost); + st->ss->detail_super(st, c->homehost, subarray); if (array.raid_disks == 0 && sra && sra->array.major_version == -1 && @@ -767,7 +767,7 @@ skip_devices_state: if (spares && c->brief && array.raid_disks) printf(" spares=%d", spares); if (c->brief && st && st->sb) - st->ss->brief_detail_super(st); + st->ss->brief_detail_super(st, subarray); if (st) st->ss->free_super(st); diff --git a/mdadm.h b/mdadm.h index c88ceab..91f1338 100644 --- a/mdadm.h +++ b/mdadm.h @@ -847,8 +847,9 @@ extern struct superswitch { /* Used to report details of an active array. * ->load_super was possibly given a 'component' string. */ - void (*detail_super)(struct supertype *st, char *homehost); - void (*brief_detail_super)(struct supertype *st); + void (*detail_super)(struct supertype *st, char *homehost, + char *subarray); + void (*brief_detail_super)(struct supertype *st, char *subarray); void (*export_detail_super)(struct supertype *st); /* Optional: platform hardware / firmware details */ diff --git a/super-ddf.c b/super-ddf.c index c095e8a..7802063 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -1730,7 +1730,8 @@ err: return 1; } -static void detail_super_ddf(struct supertype *st, char *homehost) +static void detail_super_ddf(struct supertype *st, char *homehost, + char *subarray) { struct ddf_super *sb = st->sb; int cnt = be16_to_cpu(sb->virt->populated_vdes); @@ -1787,7 +1788,7 @@ static void uuid_of_ddf_subarray(const struct ddf_super *ddf, memcpy(uuid, sha, 4*4); } -static void brief_detail_super_ddf(struct supertype *st) +static void brief_detail_super_ddf(struct supertype *st, char *subarray) { struct mdinfo info; char nbuf[64]; diff --git a/super-intel.c b/super-intel.c index a7fbed4..86dcb69 100644 --- a/super-intel.c +++ b/super-intel.c @@ -2183,23 +2183,39 @@ err: return 1; } -static void detail_super_imsm(struct supertype *st, char *homehost) +static void detail_super_imsm(struct supertype *st, char *homehost, + char *subarray) { struct mdinfo info; char nbuf[64]; + struct intel_super *super = st->sb; + int temp_vol = super->current_vol; + + if (subarray) + super->current_vol = strtoul(subarray, NULL, 10); getinfo_super_imsm(st, &info, NULL); fname_from_uuid(st, &info, nbuf, ':'); printf("\n UUID : %s\n", nbuf + 5); + + super->current_vol = temp_vol; } -static void brief_detail_super_imsm(struct supertype *st) +static void brief_detail_super_imsm(struct supertype *st, char *subarray) { struct mdinfo info; char nbuf[64]; + struct intel_super *super = st->sb; + int temp_vol = super->current_vol; + + if (subarray) + super->current_vol = strtoul(subarray, NULL, 10); + getinfo_super_imsm(st, &info, NULL); fname_from_uuid(st, &info, nbuf, ':'); printf(" UUID=%s", nbuf + 5); + + super->current_vol = temp_vol; } static int imsm_read_serial(int fd, char *devname, __u8 *serial); diff --git a/super0.c b/super0.c index 42989b9..6b7c0e3 100644 --- a/super0.c +++ b/super0.c @@ -348,7 +348,7 @@ err: return 1; } -static void detail_super0(struct supertype *st, char *homehost) +static void detail_super0(struct supertype *st, char *homehost, char *subarray) { mdp_super_t *sb = st->sb; printf(" UUID : "); @@ -368,7 +368,7 @@ static void detail_super0(struct supertype *st, char *homehost) printf("\n Events : %d.%d\n\n", sb->events_hi, sb->events_lo); } -static void brief_detail_super0(struct supertype *st) +static void brief_detail_super0(struct supertype *st, char *subarray) { mdp_super_t *sb = st->sb; printf(" UUID="); diff --git a/super1.c b/super1.c index b85dc20..929466d 100644 --- a/super1.c +++ b/super1.c @@ -833,7 +833,7 @@ err: return 1; } -static void detail_super1(struct supertype *st, char *homehost) +static void detail_super1(struct supertype *st, char *homehost, char *subarray) { struct mdp_superblock_1 *sb = st->sb; bitmap_super_t *bms = (bitmap_super_t*)(((char*)sb) + MAX_SB_SIZE); @@ -857,7 +857,7 @@ static void detail_super1(struct supertype *st, char *homehost) (unsigned long long)__le64_to_cpu(sb->events)); } -static void brief_detail_super1(struct supertype *st) +static void brief_detail_super1(struct supertype *st, char *subarray) { struct mdp_superblock_1 *sb = st->sb; int i;