dm: flush queued bios when process blocks to avoid deadlock
[firefly-linux-kernel-4.4.55.git] / drivers / net / usb / usbnet.c
index 0744bf2ef2d6e42044c6c31f7c74b0ec120e07d3..c2ea4e5666fb965fd089f27cfbdee5715cd66538 100644 (file)
@@ -1766,6 +1766,13 @@ out3:
        if (info->unbind)
                info->unbind (dev, udev);
 out1:
+       /* subdrivers must undo all they did in bind() if they
+        * fail it, but we may fail later and a deferred kevent
+        * may trigger an error resubmitting itself and, worse,
+        * schedule a timer. So we kill it all just in case.
+        */
+       cancel_work_sync(&dev->kevent);
+       del_timer_sync(&dev->delay);
        free_netdev(net);
 out:
        return status;