On command timeout handle frozen command first, to not run it inside
XXX_end_transaction(). Submitted by: avg
This commit is contained in:
parent
3889907fb2
commit
660d482a4e
@ -1259,15 +1259,16 @@ ahci_timeout(struct ahci_slot *slot)
|
||||
|
||||
if (!ch->readlog)
|
||||
xpt_freeze_simq(ch->sim, ch->numrslots);
|
||||
/* Handle command with timeout. */
|
||||
ahci_end_transaction(&ch->slot[slot->slot], AHCI_ERR_TIMEOUT);
|
||||
/* Handle the rest of commands. */
|
||||
/* Handle frozen command. */
|
||||
if (ch->frozen) {
|
||||
union ccb *fccb = ch->frozen;
|
||||
ch->frozen = NULL;
|
||||
fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ;
|
||||
xpt_done(fccb);
|
||||
}
|
||||
/* Handle command with timeout. */
|
||||
ahci_end_transaction(&ch->slot[slot->slot], AHCI_ERR_TIMEOUT);
|
||||
/* Handle the rest of commands. */
|
||||
for (i = 0; i < ch->numslots; i++) {
|
||||
/* Do we have a running request on slot? */
|
||||
if (ch->slot[i].state < AHCI_SLOT_RUNNING)
|
||||
|
@ -982,15 +982,16 @@ device_printf(dev, "%s is %08x ss %08x rs %08x es %08x sts %08x serr %08x\n",
|
||||
|
||||
if (!ch->readlog)
|
||||
xpt_freeze_simq(ch->sim, ch->numrslots);
|
||||
/* Handle command with timeout. */
|
||||
siis_end_transaction(&ch->slot[slot->slot], SIIS_ERR_TIMEOUT);
|
||||
/* Handle the rest of commands. */
|
||||
/* Handle frozen command. */
|
||||
if (ch->frozen) {
|
||||
union ccb *fccb = ch->frozen;
|
||||
ch->frozen = NULL;
|
||||
fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ;
|
||||
xpt_done(fccb);
|
||||
}
|
||||
/* Handle command with timeout. */
|
||||
siis_end_transaction(&ch->slot[slot->slot], SIIS_ERR_TIMEOUT);
|
||||
/* Handle the rest of commands. */
|
||||
for (i = 0; i < SIIS_MAX_SLOTS; i++) {
|
||||
/* Do we have a running request on slot? */
|
||||
if (ch->slot[i].state < SIIS_SLOT_RUNNING)
|
||||
|
Loading…
Reference in New Issue
Block a user