Date: Sun, 8 Dec 2002 14:37:38 +0100 (CET) From: "Simon L.Nielsen" <simon@nitro.dk> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/46096: [patch] Make atacontrol(8) give better errors Message-ID: <20021208133738.D9B3C10BF90@arthur.nitro.dk>
next in thread | raw e-mail | index | archive | help
>Number: 46096
>Category: bin
>Synopsis: [patch] Make atacontrol(8) give better errors
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sun Dec 08 05:40:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator: Simon L. Nielsen <simon@nitro.dk>
>Release: FreeBSD 4.7-STABLE i386
>Organization:
>Environment:
System: FreeBSD arthur.nitro.dk 4.7-STABLE FreeBSD 4.7-STABLE #0: Sun Dec 8 01:52:44 CET 2002 root@arthur.nitro.dk:/usr/obj/usr/src/sys/ARTHUR i386
>Description:
This is a patch to make atacontrol(8) tell the user more about what
the problem was when running atacontrol with incorrect parameters.
The patch also makes atacontrol use sysexists.h instead of hard-coded
exist levels.
Note: The patch is for current, I'm just running stable on my
workstation.
>How-To-Repeat:
N/A
>Fix:
--- atacontrol_useage.patch3 begins here ---
Index: atacontrol.c
===================================================================
RCS file: /home/mirror/freebsd/ncvs/src/sbin/atacontrol/atacontrol.c,v
retrieving revision 1.19
diff -u -d -r1.19 atacontrol.c
--- atacontrol.c 16 Sep 2002 08:34:08 -0000 1.19
+++ atacontrol.c 8 Dec 2002 13:14:35 -0000
@@ -37,6 +37,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <sysexits.h>
char *
mode2str(int mode)
@@ -83,8 +84,17 @@
void
usage()
{
- fprintf(stderr, "usage: atacontrol <command> channel [args]\n");
- exit(1);
+ fprintf(stderr, "usage: atacontrol attach <channel>\n");
+ fprintf(stderr, " atacontrol detach <channel>\n");
+ fprintf(stderr, " atacontrol reinit <channel>\n");
+ fprintf(stderr, " atacontrol create <type> [interleave] disk0 ... diskN\n");
+ fprintf(stderr, " atacontrol delete <raid>\n");
+ fprintf(stderr, " atacontrol status <raid> [mastermode slavemode]\n");
+ fprintf(stderr, " atacontrol info <channel>\n");
+ fprintf(stderr, " atacontrol cap <channel> <device>\n");
+ fprintf(stderr, " atacontrol enclosure <channel> <device>\n");
+ fprintf(stderr, " atacontrol list\n");
+ exit(EX_USAGE);
}
int
@@ -266,13 +276,17 @@
!strcmp(argv[1], "status") ||
!strcmp(argv[1], "rebuild")) {
if (!(sscanf(argv[2], "%d", &chan) == 1 ||
- sscanf(argv[2], "ar%d", &chan) == 1))
- usage();
+ sscanf(argv[2], "ar%d", &chan) == 1)) {
+ fprintf(stderr, "atacontrol: Invalid RAID device\n");
+ exit(EX_USAGE);
+ }
}
else {
if (!(sscanf(argv[2], "%d", &chan) == 1 ||
- sscanf(argv[2], "ata%d", &chan) == 1))
- usage();
+ sscanf(argv[2], "ata%d", &chan) == 1)) {
+ fprintf(stderr, "atacontrol: Invalid ATA channel\n");
+ exit(EX_USAGE);
+ }
}
iocmd.channel = chan;
}
@@ -328,13 +342,20 @@
iocmd.u.raid_setup.type = 3;
if (!strcmp(argv[2], "SPAN") || !strcmp(argv[2], "JBOD"))
iocmd.u.raid_setup.type = 4;
- if (!iocmd.u.raid_setup.type)
- usage();
+ if (!iocmd.u.raid_setup.type) {
+ 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 (!sscanf(argv[3], "%d",
- &iocmd.u.raid_setup.interleave) == 1)
- usage();
+ &iocmd.u.raid_setup.interleave) == 1) {
+ fprintf(stderr, "atacontrol: Invalid interleave\n");
+ exit(EX_USAGE);
+ }
offset = 4;
}
else
@@ -342,10 +363,20 @@
for (disk = 0; disk < 16 && (offset + disk) < argc; disk++) {
if (!(sscanf(argv[offset + disk], "%d", &dev) == 1 ||
- sscanf(argv[offset + disk], "ad%d", &dev) == 1))
- usage();
+ sscanf(argv[offset + disk], "ad%d", &dev) == 1)) {
+ fprintf(stderr, "atacontrol: Invalid device %s\n",
+ argv[offset + disk]);
+ exit(EX_USAGE);
+ }
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;
if (ioctl(fd, IOCATA, &iocmd) < 0)
err(1, "ioctl(ATARAIDCREATE)");
@@ -427,5 +458,5 @@
}
else
usage();
- exit(0);
+ exit(EX_OK);
}
--- atacontrol_useage.patch3 ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021208133738.D9B3C10BF90>
