On Mon, 18 Mar 2019, Guido Kiener wrote: > When a request must be dequeued with net2280_dequeue() e.g. due > to a device clear action and the same request is finished by the > function scan_dma_completions() then the function net2280_dequeue() > does not find the request in the following search loop and > returns the error -EINVAL without restoring the status ep->stopped. > Thus the endpoint keeps blocked and does not receive any data > anymore. > This fix restores the status and does not issue an error message. > > Signed-off-by: Guido Kiener <guido.kiener@xxxxxxxxxxxxxxxxx> > --- > drivers/usb/gadget/udc/net2280.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c > index e0b413e9e532..898339e5df10 100644 > --- a/drivers/usb/gadget/udc/net2280.c > +++ b/drivers/usb/gadget/udc/net2280.c > @@ -1273,9 +1273,9 @@ static int net2280_dequeue(struct usb_ep *_ep, struct usb_request *_req) > break; > } > if (&req->req != _req) { > + ep->stopped = stopped; > spin_unlock_irqrestore(&ep->dev->lock, flags); > - dev_err(&ep->dev->pdev->dev, "%s: Request mismatch\n", > - __func__); > + ep_dbg(ep->dev, "%s: Request mismatch\n", __func__); > return -EINVAL; > } Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>