Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Jan 2015 19:59:10 +0000 (UTC)
From:      Will Andrews <will@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r277506 - head/sys/dev/firewire
Message-ID:  <201501211959.t0LJxAKG095009@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201501211959.t0LJxAKG095009>