svn commit: r201341 - stable/8/sys/dev/ciss

Gavin Atkinson gavin at FreeBSD.org
Thu Dec 31 12:58:08 UTC 2009


Author: gavin
Date: Thu Dec 31 12:58:08 2009
New Revision: 201341
URL: http://svn.freebsd.org/changeset/base/201341

Log:
  MFC 200637:
  
  Don't panic due to unlocking an unowned mutex if we fail during attach.
  
  PR:		kern/139053
  Reviewed by:	scottl
  Approved by:	ed (mentor)

Modified:
  stable/8/sys/dev/ciss/ciss.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/dev/ciss/ciss.c
==============================================================================
--- stable/8/sys/dev/ciss/ciss.c	Thu Dec 31 12:17:38 2009	(r201340)
+++ stable/8/sys/dev/ciss/ciss.c	Thu Dec 31 12:58:08 2009	(r201341)
@@ -418,6 +418,7 @@ ciss_attach(device_t dev)
 
     sc = device_get_softc(dev);
     sc->ciss_dev = dev;
+    mtx_init(&sc->ciss_mtx, "cissmtx", NULL, MTX_DEF);
 
     /*
      * Do PCI-specific init.
@@ -430,7 +431,6 @@ ciss_attach(device_t dev)
      */
     ciss_initq_free(sc);
     ciss_initq_notify(sc);
-    mtx_init(&sc->ciss_mtx, "cissmtx", NULL, MTX_DEF);
     callout_init_mtx(&sc->ciss_periodic, &sc->ciss_mtx, 0);
 
     /*
@@ -496,8 +496,11 @@ ciss_attach(device_t dev)
 
     error = 0;
  out:
-    if (error != 0)
+    if (error != 0) {
+	/* ciss_free() expects the mutex to be held */
+	mtx_lock(&sc->ciss_mtx);
 	ciss_free(sc);
+    }
     return(error);
 }
 


More information about the svn-src-stable-8 mailing list