From 24c7bc8432b955e7c32d889266f33b5fd75b2f33 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 23 Oct 2012 17:16:16 +1100 Subject: Report replacement devices correctly with --detail and --examine --detail needs to be read to report 2 devices in each slot, and --examine need to report if the device is the original or the replacement. Signed-off-by: NeilBrown --- Detail.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'Detail.c') diff --git a/Detail.c b/Detail.c index 3a2799d5..ff0b6e86 100644 --- a/Detail.c +++ b/Detail.c @@ -239,7 +239,7 @@ int Detail(char *dev, struct context *c) disks[d].number = disks[d].raid_disk = d; } - next = array.raid_disks; + next = array.raid_disks*2; for (d = 0; d < max_disks; d++) { mdu_disk_info_t disk; disk.number = d; @@ -251,8 +251,12 @@ int Detail(char *dev, struct context *c) } if (disk.major == 0 && disk.minor == 0) continue; - if (disk.raid_disk >= 0 && disk.raid_disk < array.raid_disks) - disks[disk.raid_disk] = disk; + if (disk.raid_disk >= 0 && disk.raid_disk < array.raid_disks + && disks[disk.raid_disk*2].state == (1<= 0 && disk.raid_disk < array.raid_disks + && disks[disk.raid_disk*2+1].state == (1<= array.raid_disks && + if (d >= array.raid_disks*2 && + disk.major == 0 && + disk.minor == 0) + continue; + if ((d & 1) && disk.major == 0 && disk.minor == 0) continue; if (!c->brief) { - if (d == array.raid_disks) printf("\n"); + if (d == array.raid_disks*2) printf("\n"); if (disk.raid_disk < 0) printf(" %5d %5d %5d - ", disk.number, disk.major, disk.minor); -- cgit v1.2.3