Add "report only" functionality to 'camcontrol format', so users can get a
authorPeter Avalos <pavalos@dragonflybsd.org>
Thu, 29 Nov 2007 01:57:29 +0000 (01:57 +0000)
committerPeter Avalos <pavalos@dragonflybsd.org>
Thu, 29 Nov 2007 01:57:29 +0000 (01:57 +0000)
report on the status of a format already running on a drive.

Obtained-from: FreeBSD

sbin/camcontrol/camcontrol.8
sbin/camcontrol/camcontrol.c

index cda34f4..2334517 100644 (file)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 1998, 1999, 2000, 2002 Kenneth D. Merry.
+.\" Copyright (c) 1998, 1999, 2000, 2002, 2005 Kenneth D. Merry.
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\" $FreeBSD: src/sbin/camcontrol/camcontrol.8,v 1.19.2.12 2003/01/08 17:55:02 njl Exp $
-.\" $DragonFly: src/sbin/camcontrol/camcontrol.8,v 1.6 2007/11/24 19:22:51 pavalos Exp $
+.\" $DragonFly: src/sbin/camcontrol/camcontrol.8,v 1.7 2007/11/29 01:57:29 pavalos Exp $
 .\"
 .Dd September 14, 1998
 .Dt CAMCONTROL 8
 .Op device id
 .Op generic args
 .Op Fl q
+.Op Fl r
 .Op Fl w
 .Op Fl y
 .Nm
@@ -586,6 +587,11 @@ Be quiet, don't print any status messages.  This option will not disable
 the questions, however.  To disable questions, use the
 .Fl y
 argument, below.
+.It Fl r
+Run in
+.Dq report only
+mode.
+This will report status on a format that is already running on the drive.
 .It Fl w
 Issue a non-immediate format command.  By default,
 .Nm
index f63776a..a6d15f7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002 Kenneth D. Merry
+ * Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2005 Kenneth D. Merry
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sbin/camcontrol/camcontrol.c,v 1.21.2.13 2003/01/08 17:55:02 njl Exp $
- * $DragonFly: src/sbin/camcontrol/camcontrol.c,v 1.7 2007/11/28 21:12:11 pavalos Exp $
+ * $DragonFly: src/sbin/camcontrol/camcontrol.c,v 1.8 2007/11/29 01:57:29 pavalos Exp $
  */
 
 #include <sys/ioctl.h>
@@ -142,7 +142,7 @@ struct camcontrol_opts option_table[] = {
        {"negotiate", CAM_CMD_RATE, CAM_ARG_NONE, negotiate_opts},
        {"rate", CAM_CMD_RATE, CAM_ARG_NONE, negotiate_opts},
        {"debug", CAM_CMD_DEBUG, CAM_ARG_NONE, "IPTSXc"},
-       {"format", CAM_CMD_FORMAT, CAM_ARG_NONE, "qwy"},
+       {"format", CAM_CMD_FORMAT, CAM_ARG_NONE, "qrwy"},
 #endif /* MINIMALISTIC */
        {"help", CAM_CMD_USAGE, CAM_ARG_NONE, NULL},
        {"-?", CAM_CMD_USAGE, CAM_ARG_NONE, NULL},
@@ -2850,6 +2850,7 @@ scsiformat(struct cam_device *device, int argc, char **argv,
        u_int32_t dxfer_len = 0;
        u_int8_t byte2 = 0;
        int num_warnings = 0;
+       int reportonly = 0;
 
        ccb = cam_getccb(device);
 
@@ -2866,6 +2867,9 @@ scsiformat(struct cam_device *device, int argc, char **argv,
                case 'q':
                        quiet++;
                        break;
+               case 'r':
+                       reportonly = 1;
+                       break;
                case 'w':
                        immediate = 0;
                        break;
@@ -2875,6 +2879,9 @@ scsiformat(struct cam_device *device, int argc, char **argv,
                }
        }
 
+       if (reportonly)
+               goto doreport;
+
        if (quiet == 0) {
                fprintf(stdout, "You are about to REMOVE ALL DATA from the "
                        "following device:\n");
@@ -3017,6 +3024,7 @@ scsiformat(struct cam_device *device, int argc, char **argv,
                goto scsiformat_bailout;
        }
 
+doreport:
        do {
                cam_status status;
 
@@ -3058,7 +3066,7 @@ scsiformat(struct cam_device *device, int argc, char **argv,
 
                if ((status != CAM_REQ_CMP)
                 && (status == CAM_SCSI_STATUS_ERROR)
-                && ((status & CAM_AUTOSNS_VALID) != 0)) {
+                && ((ccb->ccb_h.status & CAM_AUTOSNS_VALID) != 0)) {
                        struct scsi_sense_data *sense;
                        int error_code, sense_key, asc, ascq;
 
@@ -3167,7 +3175,7 @@ usage(int verbose)
 "                              [-D <enable|disable>][-O offset][-q]\n"
 "                              [-R syncrate][-v][-T <enable|disable>]\n"
 "                              [-U][-W bus_width]\n"
-"        camcontrol format     [dev_id][generic args][-q][-w][-y]\n"
+"        camcontrol format     [dev_id][generic args][-q][-r][-w][-y]\n"
 #endif /* MINIMALISTIC */
 "        camcontrol help\n");
        if (!verbose)
@@ -3245,6 +3253,7 @@ usage(int verbose)
 "-v                also print a Path Inquiry CCB for the controller\n"
 "format arguments:\n"
 "-q                be quiet, don't print status messages\n"
+"-r                run in report only mode\n"
 "-w                don't send immediate format command\n"
 "-y                don't ask any questions\n");
 #endif /* MINIMALISTIC */