On Sun, 2016-07-03 at 21:59 +0200, Bjørn Mork wrote: > default: > @@ -200,10 +200,29 @@ static void wdm_in_callback(struct urb *urb) > desc->reslength = length; > } > } > + > + /* > + * If desc->resp_count is unset, then the urb was submitted > + * without a prior notification. If the device returned any > + * data, then this implies that it had messages queued without > + * notifying us. Continue reading until that queue is flushed. > + */ > + if (!desc->resp_count) { > + if (!length) { > + /* do not propagate the expected -EPIPE */ > + desc->rerr = 0; > + goto unlock; > + } > + dev_dbg(&desc->intf->dev, "got %d bytes without notification\n", length); > + set_bit(WDM_RESPONDING, &desc->flags); > + usb_submit_urb(desc->response, GFP_ATOMIC); You must check for being in an overflow condition. > + } > + > skip_error: > wake_up(&desc->wait); > > set_bit(WDM_READ, &desc->flags); > +unlock: > spin_unlock(&desc->iuspin); > } > > @@ -647,6 +666,16 @@ static int wdm_open(struct inode *inode, struct file *file) If you go for that approack you also need to do it in resume() Regards Oliver -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html