--- x/drivers/usb/class/cdc-wdm.c +++ y/drivers/usb/class/cdc-wdm.c @@ -311,11 +311,12 @@ static void wdm_int_callback(struct urb && !test_bit(WDM_DISCONNECTING, &desc->flags) && !test_bit(WDM_SUSPENDING, &desc->flags)) { rv = usb_submit_urb(desc->response, GFP_ATOMIC); + if (rv) + clear_bit(WDM_RESPONDING, &desc->flags); dev_dbg(&desc->intf->dev, "submit response URB %d\n", rv); } spin_unlock_irqrestore(&desc->iuspin, flags); if (rv < 0) { - clear_bit(WDM_RESPONDING, &desc->flags); if (rv == -EPERM) return; if (rv == -ENOMEM) {