summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2001-04-05 15:45:53 +0000
committersos <sos@FreeBSD.org>2001-04-05 15:45:53 +0000
commit5c21464a92447035eac8ffc82db7d6de900598e1 (patch)
treee023d5b973588027b001145256c8d77551be3290 /sys
parent66051d03dc660060ca561db94e51996f1bfe8d89 (diff)
downloadFreeBSD-src-5c21464a92447035eac8ffc82db7d6de900598e1.zip
FreeBSD-src-5c21464a92447035eac8ffc82db7d6de900598e1.tar.gz
More error handling cleanups.
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/ata/atapi-all.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/sys/dev/ata/atapi-all.c b/sys/dev/ata/atapi-all.c
index 1b9bba9..24f4ea2 100644
--- a/sys/dev/ata/atapi-all.c
+++ b/sys/dev/ata/atapi-all.c
@@ -229,10 +229,6 @@ atapi_queue_cmd(struct atapi_softc *atp, int8_t *ccb, caddr_t data,
error = request->error;
if (error)
atp->sense = request->sense;
-#ifdef ATAPI_DEBUG
- ata_printf(atp->controller, atp->unit, "finished %s\n",
- atapi_cmd2str(request->ccb[0]));
-#endif
if (request->dmatab)
free(request->dmatab, M_DEVBUF);
free(request, M_ATAPI);
@@ -334,9 +330,9 @@ atapi_transfer(struct atapi_request *request)
DELAY(20);
}
if (timout <= 0) {
- request->result = ATA_INB(atp->controller->r_io, ATA_ERROR);
ata_printf(atp->controller, atp->unit,
"failure to execute ATAPI packet command\n");
+ untimeout((timeout_t *)atapi_timeout, request, request->timeout_handle);
request->error = EIO;
atapi_finish(request);
return ATA_OP_FINISHED;
@@ -362,10 +358,13 @@ atapi_interrupt(struct atapi_request *request)
if (reason == ATAPI_P_CMDOUT) {
if (!(atp->controller->status & ATA_S_DRQ)) {
- request->result = ATA_INB(atp->controller->r_io, ATA_ERROR);
ata_printf(atp->controller, atp->unit,
"command interrupt without DRQ\n");
- goto op_finished;
+ untimeout((timeout_t *)atapi_timeout,
+ request, request->timeout_handle);
+ request->error = EIO;
+ atapi_finish(request);
+ return ATA_OP_FINISHED;
}
ATA_OUTSW(atp->controller->r_io, ATA_DATA, (int16_t *)request->ccb,
request->ccbsize / sizeof(int16_t));
@@ -434,8 +433,6 @@ atapi_interrupt(struct atapi_request *request)
"unknown transfer phase %d\n", reason);
}
}
-
-op_finished:
untimeout((timeout_t *)atapi_timeout, request, request->timeout_handle);
/* check for error, if valid sense key, queue a request sense cmd */
@@ -493,11 +490,6 @@ op_finished:
}
else
request->error = 0;
-#ifdef ATAPI_DEBUG
- if (request->callback)
- ata_printf(atp->controller, atp->unit, "finished %s (callback)\n",
- atapi_cmd2str(request->ccb[0]));
-#endif
atapi_finish(request);
}
return ATA_OP_FINISHED;
@@ -618,6 +610,11 @@ atapi_write(struct atapi_request *request, int length)
static void
atapi_finish(struct atapi_request *request)
{
+#ifdef ATAPI_DEBUG
+ ata_printf(atp->controller, atp->unit, "finished %s%s\n",
+ request->callback ? "callback " : "",
+ atapi_cmd2str(request->ccb[0]));
+#endif
if (request->callback) {
if (!((request->callback)(request))) {
if (request->dmatab)
OpenPOWER on IntegriCloud