From 26f1289e4995a203e4b533bfb81d18020a09dc4f Mon Sep 17 00:00:00 2001 From: Will Andrews Date: Wed, 21 Jan 2015 19:59:09 +0000 Subject: Fix one cause of firewire panics. sys/dev/firewire/firewire.c: In fw_xfer_unload(), clear the FWXF_INQ flag on the xfer under protection of the FW_GMTX, after the xfer is removeed from the tx/rx queue. Otherwise it is possible for the xfer to be removed again (corrupting the list or immediately panicing) from another thread that has found this xfer in the transaction label table. Submitted by: gibbs MFC after: 1 week Sponsored by: Spectra Logic MFSpectraBSD: 1110200 on 2015/01/02 --- sys/dev/firewire/firewire.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c index c5f5dbac1a7a..f06ac30cb183 100644 --- a/sys/dev/firewire/firewire.c +++ b/sys/dev/firewire/firewire.c @@ -1166,6 +1166,7 @@ fw_xfer_unload(struct fw_xfer *xfer) s = splfw(); FW_GLOCK(xfer->fc); STAILQ_REMOVE(&xfer->q->q, xfer, fw_xfer, link); + xfer->flag &= ~FWXF_INQ; #if 0 xfer->q->queued--; #endif -- cgit v1.2.3