Author: ian
Date: Fri Dec 13 02:20:26 2019
New Revision: 355688
URL: https://svnweb.freebsd.org/changeset/base/355688

Log:
  If device_delete_children() returns an error, bail on the rest of the
  detach work and return the error.  Especially don't call iicbus_reset()
  since the most likely cause of failing to detach children is that one
  of them has IO in progress.

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

Modified: head/sys/dev/iicbus/iicbus.c
==============================================================================
--- head/sys/dev/iicbus/iicbus.c        Fri Dec 13 02:18:44 2019        
(r355687)
+++ head/sys/dev/iicbus/iicbus.c        Fri Dec 13 02:20:26 2019        
(r355688)
@@ -134,10 +134,11 @@ static int
 iicbus_detach(device_t dev)
 {
        struct iicbus_softc *sc = IICBUS_SOFTC(dev);
+       int err;
 
+       if ((err = device_delete_children(dev)) != 0)
+               return (err);
        iicbus_reset(dev, IIC_FASTEST, 0, NULL);
-       bus_generic_detach(dev);
-       device_delete_children(dev);
        mtx_destroy(&sc->lock);
        return (0);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to