The exact race isn't known but adding the DELAY() appears to fix
it. It could be related to ccb's queued prior to the bus reset
which we have to abort.
With-help-from: Peter Avalos <pavalos@theshell.com>
kprintf("SCSI bus reset delivered. "
"%d SCBs aborted.\n", found);
}
+ /*
+ * There seems to be some sort of race between the
+ * chipset and queueing new commands after a bus
+ * reset. Add a DELAY(). Note: tsleep() cannot be
+ * used here because the ahd lock deadlocks the callout
+ * thread.
+ */
+ DELAY(100000);
ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(ccb);
break;