Added more descriptive error outputs.
PR: 46096
This commit is contained in:
parent
9c51ecf436
commit
0a2b02fe0a
@ -38,6 +38,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sysexits.h>
|
||||||
|
|
||||||
char *
|
char *
|
||||||
mode2str(int mode)
|
mode2str(int mode)
|
||||||
@ -85,7 +86,7 @@ void
|
|||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
fprintf(stderr, "usage: atacontrol <command> channel [args]\n");
|
fprintf(stderr, "usage: atacontrol <command> channel [args]\n");
|
||||||
exit(1);
|
exit(EX_USAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -268,13 +269,17 @@ main(int argc, char **argv)
|
|||||||
!strcmp(argv[1], "rebuild") ||
|
!strcmp(argv[1], "rebuild") ||
|
||||||
!strcmp(argv[1], "status")) {
|
!strcmp(argv[1], "status")) {
|
||||||
if (!(sscanf(argv[2], "%d", &chan) == 1 ||
|
if (!(sscanf(argv[2], "%d", &chan) == 1 ||
|
||||||
sscanf(argv[2], "ar%d", &chan) == 1))
|
sscanf(argv[2], "ar%d", &chan) == 1)) {
|
||||||
usage();
|
fprintf(stderr, "atacontrol: Invalid RAID device\n");
|
||||||
|
exit(EX_USAGE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!(sscanf(argv[2], "%d", &chan) == 1 ||
|
if (!(sscanf(argv[2], "%d", &chan) == 1 ||
|
||||||
sscanf(argv[2], "ata%d", &chan) == 1))
|
sscanf(argv[2], "ata%d", &chan) == 1)) {
|
||||||
usage();
|
fprintf(stderr, "atacontrol: Invalid ATA channel\n");
|
||||||
|
exit(EX_USAGE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
iocmd.channel = chan;
|
iocmd.channel = chan;
|
||||||
}
|
}
|
||||||
@ -333,13 +338,20 @@ main(int argc, char **argv)
|
|||||||
iocmd.u.raid_setup.type = 3;
|
iocmd.u.raid_setup.type = 3;
|
||||||
if (!strcmp(argv[2], "SPAN") || !strcmp(argv[2], "JBOD"))
|
if (!strcmp(argv[2], "SPAN") || !strcmp(argv[2], "JBOD"))
|
||||||
iocmd.u.raid_setup.type = 4;
|
iocmd.u.raid_setup.type = 4;
|
||||||
if (!iocmd.u.raid_setup.type)
|
if (!iocmd.u.raid_setup.type) {
|
||||||
usage();
|
fprintf(stderr, "atacontrol: Invalid RAID type\n");
|
||||||
|
fprintf(stderr, "atacontrol: Valid RAID types : \n");
|
||||||
|
fprintf(stderr, " RAID0 | stripe | RAID1 | mirror "
|
||||||
|
"| RAID0+1 | SPAN | JBOD\n");
|
||||||
|
exit(EX_USAGE);
|
||||||
|
}
|
||||||
|
|
||||||
if (iocmd.u.raid_setup.type & 1) {
|
if (iocmd.u.raid_setup.type & 1) {
|
||||||
if (!sscanf(argv[3], "%d",
|
if (!sscanf(argv[3], "%d",
|
||||||
&iocmd.u.raid_setup.interleave) == 1)
|
&iocmd.u.raid_setup.interleave) == 1) {
|
||||||
usage();
|
fprintf(stderr, "atacontrol: Invalid interleave\n");
|
||||||
|
exit(EX_USAGE);
|
||||||
|
}
|
||||||
offset = 4;
|
offset = 4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -347,10 +359,21 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
for (disk = 0; disk < 16 && (offset + disk) < argc; disk++) {
|
for (disk = 0; disk < 16 && (offset + disk) < argc; disk++) {
|
||||||
if (!(sscanf(argv[offset + disk], "%d", &dev) == 1 ||
|
if (!(sscanf(argv[offset + disk], "%d", &dev) == 1 ||
|
||||||
sscanf(argv[offset + disk], "ad%d", &dev) == 1))
|
sscanf(argv[offset + disk], "ad%d", &dev) == 1)) {
|
||||||
usage();
|
fprintf(stderr,
|
||||||
|
"atacontrol: Invalid device %s\n",
|
||||||
|
argv[offset + disk]);
|
||||||
|
exit(EX_USAGE);
|
||||||
|
}
|
||||||
iocmd.u.raid_setup.disks[disk] = dev;
|
iocmd.u.raid_setup.disks[disk] = dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(disk < 2) {
|
||||||
|
fprintf(stderr, "atacontrol: At least 2 disks must be "
|
||||||
|
"specified to create RAID\n");
|
||||||
|
exit(EX_USAGE);
|
||||||
|
}
|
||||||
|
|
||||||
iocmd.u.raid_setup.total_disks = disk;
|
iocmd.u.raid_setup.total_disks = disk;
|
||||||
if (ioctl(fd, IOCATA, &iocmd) < 0)
|
if (ioctl(fd, IOCATA, &iocmd) < 0)
|
||||||
err(1, "ioctl(ATARAIDCREATE)");
|
err(1, "ioctl(ATARAIDCREATE)");
|
||||||
@ -367,8 +390,11 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
iocmd.cmd = ATARAIDADDSPARE;
|
iocmd.cmd = ATARAIDADDSPARE;
|
||||||
if (!(sscanf(argv[3], "%d", &dev) == 1 ||
|
if (!(sscanf(argv[3], "%d", &dev) == 1 ||
|
||||||
sscanf(argv[3], "ad%d", &dev) == 1))
|
sscanf(argv[3], "ad%d", &dev) == 1)) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"atacontrol: Invalid device %s\n", argv[3]);
|
||||||
usage();
|
usage();
|
||||||
|
}
|
||||||
iocmd.u.raid_spare.disk = dev;
|
iocmd.u.raid_spare.disk = dev;
|
||||||
if (ioctl(fd, IOCATA, &iocmd) < 0)
|
if (ioctl(fd, IOCATA, &iocmd) < 0)
|
||||||
warn("ioctl(ATARAIDADDSPARE)");
|
warn("ioctl(ATARAIDADDSPARE)");
|
||||||
@ -445,5 +471,5 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
usage();
|
usage();
|
||||||
exit(0);
|
exit(EX_OK);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user