summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorken <ken@FreeBSD.org>2001-05-01 19:37:25 +0000
committerken <ken@FreeBSD.org>2001-05-01 19:37:25 +0000
commitb303ef38f5816e7d4a1f816373c84c8e923291ec (patch)
treeeffd14d11c33f6c9b486056f16559c4849163c1b
parentf22b7c560bd3e71b375d62e418318e2ebb422448 (diff)
downloadFreeBSD-src-b303ef38f5816e7d4a1f816373c84c8e923291ec.zip
FreeBSD-src-b303ef38f5816e7d4a1f816373c84c8e923291ec.tar.gz
Fix up unit attention and selection timeout handling in various peripheral
drivers. - change daprevent() to set CAM_RETRY_SELTO and SF_RETRY_UA when it calls cam_periph_runccb(). - change the pt(4) driver to ignore unit attentions - change the targ(4) driver to retry selection timeouts - clean up a few formatting glitches in the targ(4) driver Reviewed by: gibbs
-rw-r--r--sys/cam/scsi/scsi_da.c4
-rw-r--r--sys/cam/scsi/scsi_pt.c2
-rw-r--r--sys/cam/scsi/scsi_target.c16
3 files changed, 8 insertions, 14 deletions
diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c
index 4f5d01a..772e5bc 100644
--- a/sys/cam/scsi/scsi_da.c
+++ b/sys/cam/scsi/scsi_da.c
@@ -1479,8 +1479,8 @@ daprevent(struct cam_periph *periph, int action)
SSD_FULL_SIZE,
5000);
- error = cam_periph_runccb(ccb, /*error_routine*/NULL, /*cam_flags*/0,
- /*sense_flags*/0, &softc->device_stats);
+ error = cam_periph_runccb(ccb, /*error_routine*/NULL, CAM_RETRY_SELTO,
+ SF_RETRY_UA, &softc->device_stats);
if (error == 0) {
if (action == PR_ALLOW)
diff --git a/sys/cam/scsi/scsi_pt.c b/sys/cam/scsi/scsi_pt.c
index 33e4c22..3137b4a 100644
--- a/sys/cam/scsi/scsi_pt.c
+++ b/sys/cam/scsi/scsi_pt.c
@@ -544,7 +544,7 @@ ptstart(struct cam_periph *periph, union ccb *start_ccb)
/*sense_len*/SSD_FULL_SIZE,
/*timeout*/softc->io_timeout);
- start_ccb->ccb_h.ccb_state = PT_CCB_BUFFER_IO;
+ start_ccb->ccb_h.ccb_state = PT_CCB_BUFFER_IO_UA;
/*
* Block out any asyncronous callbacks
diff --git a/sys/cam/scsi/scsi_target.c b/sys/cam/scsi/scsi_target.c
index 06fc324..ee817de 100644
--- a/sys/cam/scsi/scsi_target.c
+++ b/sys/cam/scsi/scsi_target.c
@@ -1011,10 +1011,8 @@ targsendccb(struct cam_periph *periph, union ccb *ccb, union ccb *inccb)
* then honor that request. Otherwise, it's up to the
* user to perform any error recovery.
*/
- error = cam_periph_runccb(ccb,
- /* error handler */NULL,
- /* cam_flags */ 0,
- /* sense_flags */SF_RETRY_UA,
+ error = cam_periph_runccb(ccb, /* error handler */NULL,
+ CAM_RETRY_SELTO, SF_RETRY_UA,
&softc->device_stats);
if (ccb->ccb_h.func_code == XPT_CONT_TARGET_IO)
@@ -2041,8 +2039,7 @@ targerror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
/* "SCSI parity error" */
fill_sense(softc, csio->init_id, SSD_CURRENT_ERROR,
SSD_KEY_HARDWARE_ERROR, 0x47, 0x00);
- set_ca_condition(periph, csio->init_id,
- CA_CMD_SENSE);
+ set_ca_condition(periph, csio->init_id, CA_CMD_SENSE);
csio->resid = csio->dxfer_len;
error = EIO;
break;
@@ -2054,9 +2051,7 @@ targerror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
if (sense != 0) {
copy_sense(softc, istate, (u_int8_t *)&csio->sense_data,
csio->sense_len);
- set_ca_condition(periph,
- csio->init_id,
- CA_CMD_SENSE);
+ set_ca_condition(periph, csio->init_id, CA_CMD_SENSE);
}
csio->resid = csio->dxfer_len;
error = EIO;
@@ -2065,8 +2060,7 @@ targerror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
/* "Initiator detected error message received" */
fill_sense(softc, csio->init_id, SSD_CURRENT_ERROR,
SSD_KEY_HARDWARE_ERROR, 0x48, 0x00);
- set_ca_condition(periph, csio->init_id,
- CA_CMD_SENSE);
+ set_ca_condition(periph, csio->init_id, CA_CMD_SENSE);
csio->resid = csio->dxfer_len;
error = EIO;
break;
OpenPOWER on IntegriCloud