Fix panic after "WARNING - ATA_IDENTIFY taskqueue timeout"
When performing a firmware upgrade via atacontrol[1] the subsequent command may time out producing the error message above. When this happens the callout could still be active, and the system would then panic due to a destroyed semaphore. Instead, ensure that the callout is done first, via callout_drain. Note that this fix applies to the "old" ata(4) and so isn't applicable to the default configuration in HEAD. It is still applicable to stable/8. [1] http://lists.freebsd.org/pipermail/freebsd-current/2012-January/031122.html Submitted by: Nima Misaghian Reviewed by: rstone, attilio, mav Obtained from: SVOS MFC after: 3 days
This commit is contained in:
parent
e8e848ef8e
commit
1707b4455f
@ -112,6 +112,7 @@ ata_queue_request(struct ata_request *request)
|
||||
ATA_DEBUG_RQ(request, "wait for completion");
|
||||
if (!dumping &&
|
||||
sema_timedwait(&request->done, request->timeout * hz * 4)) {
|
||||
callout_drain(&request->callout);
|
||||
device_printf(request->dev,
|
||||
"WARNING - %s taskqueue timeout "
|
||||
"- completing request directly\n",
|
||||
|
Loading…
x
Reference in New Issue
Block a user