svn commit: r231573 - head/sys/dev/ata
Ed Maste
emaste at FreeBSD.org
Mon Feb 13 01:44:13 UTC 2012
Author: emaste
Date: Mon Feb 13 01:44:12 2012
New Revision: 231573
URL: http://svn.freebsd.org/changeset/base/231573
Log:
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
Modified:
head/sys/dev/ata/ata-queue.c
Modified: head/sys/dev/ata/ata-queue.c
==============================================================================
--- head/sys/dev/ata/ata-queue.c Mon Feb 13 01:33:39 2012 (r231572)
+++ head/sys/dev/ata/ata-queue.c Mon Feb 13 01:44:12 2012 (r231573)
@@ -112,6 +112,7 @@ ata_queue_request(struct ata_request *re
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",
More information about the svn-src-head
mailing list