From simon@arthur.nitro.dk Sun Dec 8 05:37:40 2002 Return-Path: Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D874337B401 for ; Sun, 8 Dec 2002 05:37:40 -0800 (PST) Received: from arthur.nitro.dk (port324.ds1-khk.adsl.cybercity.dk [212.242.113.79]) by mx1.FreeBSD.org (Postfix) with ESMTP id A4CC843EB2 for ; Sun, 8 Dec 2002 05:37:39 -0800 (PST) (envelope-from simon@arthur.nitro.dk) Received: by arthur.nitro.dk (Postfix, from userid 1000) id D9B3C10BF90; Sun, 8 Dec 2002 14:37:38 +0100 (CET) Message-Id: <20021208133738.D9B3C10BF90@arthur.nitro.dk> Date: Sun, 8 Dec 2002 14:37:38 +0100 (CET) From: Simon L.Nielsen Reply-To: Simon L.Nielsen To: FreeBSD-gnats-submit@freebsd.org Cc: Subject: [patch] Make atacontrol(8) give better errors X-Send-Pr-Version: 3.113 X-GNATS-Notify: >Number: 46096 >Category: bin >Synopsis: [patch] Make atacontrol(8) give better errors >Confidential: no >Severity: non-critical >Priority: low >Responsible: sos >State: closed >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Dec 08 05:40:01 PST 2002 >Closed-Date: Sun May 04 02:51:35 PDT 2003 >Last-Modified: Sun May 04 02:51:35 PDT 2003 >Originator: Simon L. Nielsen >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 #include #include +#include char * mode2str(int mode) @@ -83,8 +84,17 @@ void usage() { - fprintf(stderr, "usage: atacontrol channel [args]\n"); - exit(1); + fprintf(stderr, "usage: atacontrol attach \n"); + fprintf(stderr, " atacontrol detach \n"); + fprintf(stderr, " atacontrol reinit \n"); + fprintf(stderr, " atacontrol create [interleave] disk0 ... diskN\n"); + fprintf(stderr, " atacontrol delete \n"); + fprintf(stderr, " atacontrol status [mastermode slavemode]\n"); + fprintf(stderr, " atacontrol info \n"); + fprintf(stderr, " atacontrol cap \n"); + fprintf(stderr, " atacontrol enclosure \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: Responsible-Changed-From-To: freebsd-bugs->sos Responsible-Changed-By: roam Responsible-Changed-When: Sun Dec 8 11:32:26 PST 2002 Responsible-Changed-Why: Over to the ATA/ATAPI code maintainer. http://www.freebsd.org/cgi/query-pr.cgi?pr=46096 State-Changed-From-To: open->closed State-Changed-By: sos State-Changed-When: Sun May 4 02:50:27 PDT 2003 State-Changed-Why: Committed in a sligthly modified version to -current. http://www.freebsd.org/cgi/query-pr.cgi?pr=46096 >Unformatted: