David Milburn wrote: > Hannes, > > Does ahc_done need to check the SCB_ACTIVE flag only if the SCB > is not in the untagged queue before panic? > > If the driver is in error recovery, you may end panic'ing > on a TUR that is in the untagged queue. > > Attempting to queue an ABORT message > CDB: 0x0 0x0 0x0 0x0 0x0 0x0 > SCB 3 done'd twice > > This patch is included in Adaptec's 6.3.11 driver on their > website. > > Thank you, > David > > --- scsi-misc-2.6.git/drivers/scsi/aic7xxx/aic7xxx_osm.c.abort > +++ scsi-misc-2.6.git/drivers/scsi/aic7xxx/aic7xxx_osm.c > @@ -1658,9 +1658,12 @@ ahc_done(struct ahc_softc *ahc, struct s > untagged_q = &(ahc->untagged_queues[target_offset]); > TAILQ_REMOVE(untagged_q, scb, links.tqe); > BUG_ON(!TAILQ_EMPTY(untagged_q)); > - } > - > - if ((scb->flags & SCB_ACTIVE) == 0) { > + } else if ((scb->flags & SCB_ACTIVE) == 0) { > + /* > + * Transactions aborted from the untagged queue may > + * not have been dispatched to the controller, so > + * only check the SCB_ACTIVE flag for tagged transactions. > + */ > printf("SCB %d done'd twice\n", scb->hscb->tag); > ahc_dump_card_state(ahc); > panic("Stopping for safety"); > Yes, this looks correct. The SCB_ACTIVE flag is reset when doing an ahc_scb_free() at the very end of ahc_done(). And seeing that we are re-using scbs for error recovery we might indeed end up with an scb with SCB_ACTIVE is set. But I'll do some more investigation. Do you have any setup to exercise this? Cheers, Hannes -- Dr. Hannes Reinecke zSeries & Storage hare@xxxxxxx +49 911 74053 688 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: Markus Rex, HRB 16746 (AG Nürnberg) - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html