diff --git a/sys/dev/firewire/fwohci.c b/sys/dev/firewire/fwohci.c index 2ab6af81139f..5fbd872b3210 100644 --- a/sys/dev/firewire/fwohci.c +++ b/sys/dev/firewire/fwohci.c @@ -1085,20 +1085,20 @@ fwohci_txd(struct fwohci_softc *sc, struct fwohci_dbch *dbch) printf("already rcvd\n"); fw_xfer_done(xfer); } else { - xfer->state = FWXF_SENT; - if (err == EBUSY && fc->status != FWBUSRESET) { - xfer->state = FWXF_BUSY; - xfer->resp = err; - if (xfer->retry_req != NULL) - xfer->retry_req(xfer); - else + xfer->state = FWXF_SENT; + if (err == EBUSY && fc->status != FWBUSRESET) { + xfer->state = FWXF_BUSY; + xfer->resp = err; + if (xfer->retry_req != NULL) + xfer->retry_req(xfer); + else + fw_xfer_done(xfer); + } else if (stat != FWOHCIEV_ACKPEND) { + if (stat != FWOHCIEV_ACKCOMPL) + xfer->state = FWXF_SENTERR; + xfer->resp = err; fw_xfer_done(xfer); - } else if (stat != FWOHCIEV_ACKPEND) { - if (stat != FWOHCIEV_ACKCOMPL) - xfer->state = FWXF_SENTERR; - xfer->resp = err; - fw_xfer_done(xfer); - } + } } /* * The watchdog timer takes care of split