Rework cam error handling to fix Mitsumi floppy drives.

Submitted by:	mav
This commit is contained in:
Andrew Thompson 2010-01-29 02:38:34 +00:00
parent c2b2c741a0
commit 2155c5d814
1 changed files with 12 additions and 4 deletions

View File

@ -2594,11 +2594,19 @@ umass_cam_cb(struct umass_softc *sc, union ccb *ccb, uint32_t residue,
default:
/*
* the wire protocol failed and will have recovered
* (hopefully). We return an error to CAM and let CAM retry
* the command if necessary.
* The wire protocol failed and will hopefully have
* recovered. We return an error to CAM and let CAM
* retry the command if necessary. In case of SCSI IO
* commands we ask the CAM layer to check the
* condition first. This is a quick hack to make
* certain devices work.
*/
ccb->ccb_h.status = CAM_REQ_CMP_ERR;
if (ccb->ccb_h.func_code == XPT_SCSI_IO) {
ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR;
ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
} else {
ccb->ccb_h.status = CAM_REQ_CMP_ERR;
}
xpt_done(ccb);
break;
}