svn commit: r277506 - head/sys/dev/firewire

Will Andrews will at FreeBSD.org
Wed Jan 21 19:59:10 UTC 2015


Author: will
Date: Wed Jan 21 19:59:09 2015
New Revision: 277506
URL: https://svnweb.freebsd.org/changeset/base/277506

Log:
  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

Modified:
  head/sys/dev/firewire/firewire.c

Modified: head/sys/dev/firewire/firewire.c
==============================================================================
--- head/sys/dev/firewire/firewire.c	Wed Jan 21 19:53:52 2015	(r277505)
+++ head/sys/dev/firewire/firewire.c	Wed Jan 21 19:59:09 2015	(r277506)
@@ -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


More information about the svn-src-head mailing list