summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authormjacob <mjacob@NetBSD.org>1999-06-17 04:20:55 +0000
committermjacob <mjacob@NetBSD.org>1999-06-17 04:20:55 +0000
commit92f90fcb92c075aee083bfca8e62ff3708fad197 (patch)
treec0d4fa41087df308f963e2d4f91930396d8c587c /sys/dev
parentf274deb90ad46fe2b0e02c4aa6e8ac046d3a5f9c (diff)
STK 9490 && SD-3 drives incorrectly quirked as not supporting the LOAD command.
Anyway, just because a drive doesn't support the LOAD (to BOT) command does not mean that the drive doesn't support the UNLOAD command. Also note and print errors in rewinds and unloads (and errors in writing closing filemarks for same).
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/scsipi/st.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/sys/dev/scsipi/st.c b/sys/dev/scsipi/st.c
index 250bde62b67..d70bf246e20 100644
--- a/sys/dev/scsipi/st.c
+++ b/sys/dev/scsipi/st.c
@@ -1,4 +1,4 @@
-/* $NetBSD: st.c,v 1.111 1999/04/05 19:19:34 mycroft Exp $ */
+/* $NetBSD: st.c,v 1.112 1999/06/17 04:20:55 mjacob Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -243,7 +243,7 @@ struct st_quirk_inquiry_pattern st_quirk_patterns[] = {
}}},
{{T_SEQUENTIAL, T_REMOV,
"STK", "9490", ""},
- {ST_Q_FORCE_BLKSIZE|ST_Q_IGNORE_LOADS, 0, {
+ {ST_Q_FORCE_BLKSIZE, 0, {
{0, 0, 0}, /* minor 0-3 */
{0, 0, 0}, /* minor 4-7 */
{0, 0, 0}, /* minor 8-11 */
@@ -251,7 +251,7 @@ struct st_quirk_inquiry_pattern st_quirk_patterns[] = {
}}},
{{T_SEQUENTIAL, T_REMOV,
"STK", "SD-3", ""},
- {ST_Q_FORCE_BLKSIZE|ST_Q_IGNORE_LOADS, 0, {
+ {ST_Q_FORCE_BLKSIZE, 0, {
{0, 0, 0}, /* minor 0-3 */
{0, 0, 0}, /* minor 4-7 */
{0, 0, 0}, /* minor 8-11 */
@@ -2014,15 +2014,18 @@ st_load(st, type, flags)
u_int type;
int flags;
{
+ int error;
struct scsi_load cmd;
if (type != LD_LOAD) {
- int error;
int nmarks;
error = st_check_eod(st, FALSE, &nmarks, flags);
- if (error)
+ if (error) {
+ printf("%s: failed to write closing filemarks at "
+ "unload, errno=%d\n", st->sc_dev.dv_xname, error);
return (error);
+ }
}
if (st->quirks & ST_Q_IGNORE_LOADS) {
if (type == LD_LOAD) {
@@ -2031,16 +2034,21 @@ st_load(st, type, flags)
*/
return st_rewind(st, 0, flags);
}
- return (0);
+ /* otherwise, we should do what's asked of us */
}
bzero(&cmd, sizeof(cmd));
cmd.opcode = LOAD;
cmd.how = type;
- return (scsipi_command(st->sc_link,
+ error = scsipi_command(st->sc_link,
(struct scsipi_generic *)&cmd, sizeof(cmd),
- 0, 0, ST_RETRIES, ST_SPC_TIME, NULL, flags));
+ 0, 0, ST_RETRIES, ST_SPC_TIME, NULL, flags);
+ if (error) {
+ printf("%s: error %d in st_load (op %d)\n",
+ st->sc_dev.dv_xname, error, type);
+ }
+ return (error);
}
/*
@@ -2057,17 +2065,25 @@ st_rewind(st, immediate, flags)
int nmarks;
error = st_check_eod(st, FALSE, &nmarks, flags);
- if (error)
+ if (error) {
+ printf("%s: failed to write closing filemarks at "
+ "rewind, errno=%d\n", st->sc_dev.dv_xname, error);
return (error);
+ }
st->flags &= ~ST_PER_ACTION;
bzero(&cmd, sizeof(cmd));
cmd.opcode = REWIND;
cmd.byte2 = immediate;
- return (scsipi_command(st->sc_link,
+ error = scsipi_command(st->sc_link,
(struct scsipi_generic *)&cmd, sizeof(cmd), 0, 0, ST_RETRIES,
- immediate ? ST_CTL_TIME: ST_SPC_TIME, NULL, flags));
+ immediate ? ST_CTL_TIME: ST_SPC_TIME, NULL, flags);
+ if (error) {
+ printf("%s: error %d trying to rewind\n",
+ st->sc_dev.dv_xname, error);
+ }
+ return (error);
}
int