summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormjacob <mjacob@FreeBSD.org>2001-07-02 17:48:59 +0000
committermjacob <mjacob@FreeBSD.org>2001-07-02 17:48:59 +0000
commit214a2d49f58fd8b7f804f4b375affacba9900a53 (patch)
treea00efc42394b8a4bf1c6ac50320d87d8aff2ada6
parente4ef9e1284c3742de10d0e13ebb453cd8491b788 (diff)
downloadFreeBSD-src-214a2d49f58fd8b7f804f4b375affacba9900a53.zip
FreeBSD-src-214a2d49f58fd8b7f804f4b375affacba9900a53.tar.gz
A slightly more complete change to timeouts:
1. Add SA_IO_TIMEOUT as an option (4 minutes default) to cover reads, writes, wfm, test unit ready. 2. Add internal SCSIOP_TIMEOUT (e.g., for mode sense) at 1 minute. This should not require an option, but is cleaner to parameterize. MFC after: 1 week
-rw-r--r--sys/cam/scsi/scsi_sa.c36
-rw-r--r--sys/conf/NOTES4
-rw-r--r--sys/conf/options1
-rw-r--r--sys/i386/conf/NOTES4
4 files changed, 31 insertions, 14 deletions
diff --git a/sys/cam/scsi/scsi_sa.c b/sys/cam/scsi/scsi_sa.c
index 0b7c2e0..91180ed 100644
--- a/sys/cam/scsi/scsi_sa.c
+++ b/sys/cam/scsi/scsi_sa.c
@@ -65,6 +65,9 @@
#include <opt_sa.h>
+#ifndef SA_IO_TIMEOUT
+#define SA_IO_TIMEOUT 4
+#endif
#ifndef SA_SPACE_TIMEOUT
#define SA_SPACE_TIMEOUT 1 * 60
#endif
@@ -75,6 +78,9 @@
#define SA_ERASE_TIMEOUT 4 * 60
#endif
+#define SCSIOP_TIMEOUT (60 * 1000) /* not an option */
+
+#define IO_TIMEOUT (SA_IO_TIMEOUT * 60 * 1000)
#define REWIND_TIMEOUT (SA_REWIND_TIMEOUT * 60 * 1000)
#define ERASE_TIMEOUT (SA_ERASE_TIMEOUT * 60 * 1000)
#define SPACE_TIMEOUT (SA_SPACE_TIMEOUT * 60 * 1000)
@@ -1635,7 +1641,7 @@ sastart(struct cam_periph *periph, union ccb *start_ccb)
MSG_SIMPLE_Q_TAG, (bp->bio_cmd == BIO_READ),
FALSE, (softc->flags & SA_FLAG_FIXED) != 0,
length, bp->bio_data, bp->bio_bcount, SSD_FULL_SIZE,
- 120 * 60 * 1000);
+ IO_TIMEOUT);
start_ccb->ccb_h.ccb_pflags &= ~SA_POSITION_UPDATED;
Set_CCB_Type(start_ccb, SA_CCB_BUFFER_IO);
start_ccb->ccb_h.ccb_bp = bp;
@@ -1800,14 +1806,14 @@ samount(struct cam_periph *periph, int oflags, dev_t dev)
if (softc->flags & SA_FLAG_TAPE_MOUNTED) {
ccb = cam_periph_getccb(periph, 1);
scsi_test_unit_ready(&ccb->csio, 0, sadone,
- MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, 5 * 60 * 1000);
+ MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, IO_TIMEOUT);
error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT,
&softc->device_stats);
QFRLS(ccb);
if (error == ENXIO) {
softc->flags &= ~SA_FLAG_TAPE_MOUNTED;
scsi_test_unit_ready(&ccb->csio, 0, sadone,
- MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, 5 * 60 * 1000);
+ MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, IO_TIMEOUT);
error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT,
&softc->device_stats);
QFRLS(ccb);
@@ -1829,7 +1835,7 @@ samount(struct cam_periph *periph, int oflags, dev_t dev)
}
ccb = cam_periph_getccb(periph, 1);
scsi_test_unit_ready(&ccb->csio, 0, sadone,
- MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, 5 * 60 * 1000);
+ MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, IO_TIMEOUT);
error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT,
&softc->device_stats);
QFRLS(ccb);
@@ -1893,7 +1899,7 @@ samount(struct cam_periph *periph, int oflags, dev_t dev)
scsi_sa_read_write(&ccb->csio, 0, sadone,
MSG_SIMPLE_Q_TAG, 1, FALSE, 0, 8192,
(void *) rblim, 8192, SSD_FULL_SIZE,
- 120 * 60 * 1000);
+ IO_TIMEOUT);
(void) cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT,
&softc->device_stats);
QFRLS(ccb);
@@ -1915,7 +1921,7 @@ samount(struct cam_periph *periph, int oflags, dev_t dev)
* Next off, determine block limits.
*/
scsi_read_block_limits(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG,
- rblim, SSD_FULL_SIZE, 5000);
+ rblim, SSD_FULL_SIZE, SCSIOP_TIMEOUT);
error = cam_periph_runccb(ccb, saerror, CAM_RETRY_SELTO,
SF_NO_PRINT | SF_RETRY_UA, &softc->device_stats);
@@ -2496,7 +2502,7 @@ retry:
scsi_mode_sense(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG, FALSE,
SMS_PAGE_CTRL_CURRENT, (params_to_get & SA_PARAM_COMPRESSION) ?
cpage : SMS_VENDOR_SPECIFIC_PAGE, mode_buffer, mode_buffer_len,
- SSD_FULL_SIZE, 5000);
+ SSD_FULL_SIZE, SCSIOP_TIMEOUT);
error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT,
&softc->device_stats);
@@ -2559,7 +2565,8 @@ retry:
scsi_mode_sense(&ccb->csio, 2, sadone, MSG_SIMPLE_Q_TAG, FALSE,
SMS_PAGE_CTRL_CURRENT, SMS_VENDOR_SPECIFIC_PAGE,
- mode_buffer, mode_buffer_len, SSD_FULL_SIZE, 5000);
+ mode_buffer, mode_buffer_len, SSD_FULL_SIZE,
+ SCSIOP_TIMEOUT);
error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT,
&softc->device_stats);
@@ -2853,7 +2860,7 @@ retry:
/* It is safe to retry this operation */
scsi_mode_select(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG,
(params_to_set & SA_PARAM_COMPRESSION)? TRUE : FALSE,
- FALSE, mode_buffer, mode_buffer_len, SSD_FULL_SIZE, 5000);
+ FALSE, mode_buffer, mode_buffer_len, SSD_FULL_SIZE, SCSIOP_TIMEOUT);
error = cam_periph_runccb(ccb, saerror, 0,
sense_flags, &softc->device_stats);
@@ -2970,7 +2977,7 @@ saprevent(struct cam_periph *periph, int action)
/* It is safe to retry this operation */
scsi_prevent(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG, action,
- SSD_FULL_SIZE, 100000);
+ SSD_FULL_SIZE, SCSIOP_TIMEOUT);
error = cam_periph_runccb(ccb, saerror, 0, sf, &softc->device_stats);
QFRLS(ccb);
@@ -3105,7 +3112,7 @@ sawritefilemarks(struct cam_periph *periph, int nmarks, int setmarks)
softc->dsreg = MTIO_DSREG_FMK;
/* this *must* not be retried */
scsi_write_filemarks(&ccb->csio, 0, sadone, MSG_SIMPLE_Q_TAG,
- FALSE, setmarks, nmarks, SSD_FULL_SIZE, 180000);
+ FALSE, setmarks, nmarks, SSD_FULL_SIZE, IO_TIMEOUT);
softc->dsreg = MTIO_DSREG_REST;
@@ -3160,7 +3167,7 @@ sardpos(struct cam_periph *periph, int hard, u_int32_t *blkptr)
ccb = cam_periph_getccb(periph, 1);
scsi_read_position(&ccb->csio, 1, sadone, MSG_SIMPLE_Q_TAG,
- hard, &loc, SSD_FULL_SIZE, 5000);
+ hard, &loc, SSD_FULL_SIZE, SCSIOP_TIMEOUT);
softc->dsreg = MTIO_DSREG_RBSY;
error = cam_periph_runccb(ccb, saerror, 0, 0, &softc->device_stats);
softc->dsreg = MTIO_DSREG_REST;
@@ -3199,7 +3206,8 @@ sasetpos(struct cam_periph *periph, int hard, u_int32_t *blkptr)
scsi_set_position(&ccb->csio, 1, sadone, MSG_SIMPLE_Q_TAG,
- hard, *blkptr, SSD_FULL_SIZE, 60 * 60 * 1000);
+ hard, *blkptr, SSD_FULL_SIZE, SPACE_TIMEOUT);
+
softc->dsreg = MTIO_DSREG_POS;
error = cam_periph_runccb(ccb, saerror, 0, 0, &softc->device_stats);
@@ -3255,7 +3263,7 @@ sareservereleaseunit(struct cam_periph *periph, int reserve)
/* It is safe to retry this operation */
scsi_reserve_release_unit(&ccb->csio, 2, sadone, MSG_SIMPLE_Q_TAG,
- FALSE, 0, SSD_FULL_SIZE, 5000, reserve);
+ FALSE, 0, SSD_FULL_SIZE, SCSIOP_TIMEOUT, reserve);
softc->dsreg = MTIO_DSREG_RBSY;
error = cam_periph_runccb(ccb, saerror, 0,
SF_RETRY_UA | SF_NO_PRINT, &softc->device_stats);
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index ec3e9c9..ead1d18 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -917,6 +917,8 @@ device pass #CAM passthrough driver
# CAM_DEBUG_SUBTRACE, and CAM_DEBUG_CDB
#
# CAM_MAX_HIGHPOWER: Maximum number of concurrent high power (start unit) cmds
+# CAM_NEW_TRAN_CODE: this is the new transport layer code that will be switched
+# to soon
# SCSI_NO_SENSE_STRINGS: When defined disables sense descriptions
# SCSI_NO_OP_STRINGS: When defined disables opcode descriptions
# SCSI_DELAY: The number of MILLISECONDS to freeze the SIM (scsi adapter)
@@ -947,10 +949,12 @@ options CHANGER_MIN_BUSY_SECONDS=2
options CHANGER_MAX_BUSY_SECONDS=10
# Options for the CAM sequential access driver:
+# SA_IO_TIMEOUT: Timeout for read/write/wfm operations, in minutes
# SA_SPACE_TIMEOUT: Timeout for space operations, in minutes
# SA_REWIND_TIMEOUT: Timeout for rewind operations, in minutes
# SA_ERASE_TIMEOUT: Timeout for erase operations, in minutes
# SA_1FM_AT_EOD: Default to model which only has a default one filemark at EOT.
+options SA_IO_TIMEOUT="(4)"
options SA_SPACE_TIMEOUT="(60)"
options SA_REWIND_TIMEOUT="(2*60)"
options SA_ERASE_TIMEOUT="(4*60)"
diff --git a/sys/conf/options b/sys/conf/options
index 6fc2289..4d295bb 100644
--- a/sys/conf/options
+++ b/sys/conf/options
@@ -189,6 +189,7 @@ CHANGER_MIN_BUSY_SECONDS opt_cd.h
CHANGER_MAX_BUSY_SECONDS opt_cd.h
# Options used only in cam/scsi/scsi_sa.c.
+SA_IO_TIMEOUT opt_sa.h
SA_SPACE_TIMEOUT opt_sa.h
SA_REWIND_TIMEOUT opt_sa.h
SA_ERASE_TIMEOUT opt_sa.h
diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES
index ec3e9c9..ead1d18 100644
--- a/sys/i386/conf/NOTES
+++ b/sys/i386/conf/NOTES
@@ -917,6 +917,8 @@ device pass #CAM passthrough driver
# CAM_DEBUG_SUBTRACE, and CAM_DEBUG_CDB
#
# CAM_MAX_HIGHPOWER: Maximum number of concurrent high power (start unit) cmds
+# CAM_NEW_TRAN_CODE: this is the new transport layer code that will be switched
+# to soon
# SCSI_NO_SENSE_STRINGS: When defined disables sense descriptions
# SCSI_NO_OP_STRINGS: When defined disables opcode descriptions
# SCSI_DELAY: The number of MILLISECONDS to freeze the SIM (scsi adapter)
@@ -947,10 +949,12 @@ options CHANGER_MIN_BUSY_SECONDS=2
options CHANGER_MAX_BUSY_SECONDS=10
# Options for the CAM sequential access driver:
+# SA_IO_TIMEOUT: Timeout for read/write/wfm operations, in minutes
# SA_SPACE_TIMEOUT: Timeout for space operations, in minutes
# SA_REWIND_TIMEOUT: Timeout for rewind operations, in minutes
# SA_ERASE_TIMEOUT: Timeout for erase operations, in minutes
# SA_1FM_AT_EOD: Default to model which only has a default one filemark at EOT.
+options SA_IO_TIMEOUT="(4)"
options SA_SPACE_TIMEOUT="(60)"
options SA_REWIND_TIMEOUT="(2*60)"
options SA_ERASE_TIMEOUT="(4*60)"
OpenPOWER on IntegriCloud