summaryrefslogtreecommitdiffstats
path: root/sbin/atacontrol/atacontrol.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/atacontrol/atacontrol.c')
-rw-r--r--sbin/atacontrol/atacontrol.c50
1 files changed, 31 insertions, 19 deletions
diff --git a/sbin/atacontrol/atacontrol.c b/sbin/atacontrol/atacontrol.c
index 27aeb00..451ae75 100644
--- a/sbin/atacontrol/atacontrol.c
+++ b/sbin/atacontrol/atacontrol.c
@@ -528,30 +528,30 @@ main(int argc, char **argv)
exit(EX_OK);
}
if (!strcmp(argv[1], "status") && argc == 3) {
- struct ata_ioc_raid_config config;
- int i;
+ struct ata_ioc_raid_status status;
+ int i, lun, state;
- if (!(sscanf(argv[2], "ar%d", &config.lun) == 1)) {
+ if (!(sscanf(argv[2], "ar%d", &status.lun) == 1)) {
fprintf(stderr,
"atacontrol: Invalid array %s\n", argv[2]);
usage();
}
- if (ioctl(fd, IOCATARAIDSTATUS, &config) < 0)
+ if (ioctl(fd, IOCATARAIDSTATUS, &status) < 0)
err(1, "ioctl(IOCATARAIDSTATUS)");
- printf("ar%d: ATA ", config.lun);
- switch (config.type) {
+ printf("ar%d: ATA ", status.lun);
+ switch (status.type) {
case AR_RAID0:
- printf("RAID0 stripesize=%d", config.interleave);
+ printf("RAID0 stripesize=%d", status.interleave);
break;
case AR_RAID1:
printf("RAID1");
break;
case AR_RAID01:
- printf("RAID0+1 stripesize=%d", config.interleave);
+ printf("RAID0+1 stripesize=%d", status.interleave);
break;
case AR_RAID5:
- printf("RAID5 stripesize=%d", config.interleave);
+ printf("RAID5 stripesize=%d", status.interleave);
break;
case AR_JBOD:
printf("JBOD");
@@ -559,15 +559,8 @@ main(int argc, char **argv)
printf("SPAN");
break;
}
- printf(" subdisks: ");
- for (i = 0; i < config.total_disks; i++) {
- if (config.disks[i] >= 0)
- printf("ad%d ", config.disks[i]);
- else
- printf("DOWN ");
- }
- printf("status: ");
- switch (config.status) {
+ printf(" status: ");
+ switch (status.status) {
case AR_READY:
printf("READY\n");
break;
@@ -576,11 +569,30 @@ main(int argc, char **argv)
break;
case AR_READY | AR_DEGRADED | AR_REBUILDING:
printf("REBUILDING %d%% completed\n",
- config.progress);
+ status.progress);
break;
default:
printf("BROKEN\n");
}
+ printf(" subdisks:\n");
+ for (i = 0; i < status.total_disks; i++) {
+ printf(" %2d ", i);
+ lun = status.disks[i].lun;
+ state = status.disks[i].state;
+ if (lun < 0)
+ printf("---- ");
+ else
+ printf("ad%-2d ", lun);
+ if (state & AR_DISK_ONLINE)
+ printf("ONLINE");
+ else if (state & AR_DISK_SPARE)
+ printf("SPARE");
+ else if (state & AR_DISK_PRESENT)
+ printf("OFFLINE");
+ else
+ printf("MISSING");
+ printf("\n");
+ }
exit(EX_OK);
}
usage();
OpenPOWER on IntegriCloud