svn commit: r208310 - stable/7/sys/dev/ciss

John Baldwin jhb at FreeBSD.org
Wed May 19 19:45:17 UTC 2010


Author: jhb
Date: Wed May 19 19:45:17 2010
New Revision: 208310
URL: http://svn.freebsd.org/changeset/base/208310

Log:
  MFC 200637,207335:
  - Don't panic due to unlocking an unowned mutex if we fail during attach.
  - Initialize the callout structure earlier in attach before calling any
    routines that can fail since ciss_free() always tries to stop and drain
    the callout.

Modified:
  stable/7/sys/dev/ciss/ciss.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/dev/ciss/ciss.c
==============================================================================
--- stable/7/sys/dev/ciss/ciss.c	Wed May 19 19:44:00 2010	(r208309)
+++ stable/7/sys/dev/ciss/ciss.c	Wed May 19 19:45:17 2010	(r208310)
@@ -394,6 +394,8 @@ ciss_attach(device_t dev)
 
     sc = device_get_softc(dev);
     sc->ciss_dev = dev;
+    mtx_init(&sc->ciss_mtx, "cissmtx", NULL, MTX_DEF);
+    callout_init_mtx(&sc->ciss_periodic, &sc->ciss_mtx, 0);
 
     /*
      * Work out adapter type.
@@ -428,8 +430,6 @@ ciss_attach(device_t dev)
     ciss_initq_busy(sc);
     ciss_initq_complete(sc);
     ciss_initq_notify(sc);
-    mtx_init(&sc->ciss_mtx, "cissmtx", NULL, MTX_DEF);
-    callout_init_mtx(&sc->ciss_periodic, &sc->ciss_mtx, 0);
 
     /*
      * Initalize device sysctls.
@@ -494,8 +494,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-all mailing list