From: Mike Lockwood Date: Sat, 19 Feb 2011 20:33:17 +0000 (-0500) Subject: USB: gadget: f_mtp: dequeue request on error in mtp_read X-Git-Tag: firefly_0821_release~7613^2~654 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=43f3dc8f5cab19d2baeb3d8d4d6fc01e2d19c337;p=firefly-linux-kernel-4.4.55.git USB: gadget: f_mtp: dequeue request on error in mtp_read In mtp_read(), if wait_event_interruptible() returns an error, we need to remove the request from the EP queue. Else, on the next call to mtp_read(), we will attempt to enqueue the request again, potentially corrupting the queue. This is what happens with musb_gadget_queue(), which does not check for duplicate requests. Based on a similar change to f_adb.c Signed-off-by: Mike Lockwood --- diff --git a/drivers/usb/gadget/f_mtp.c b/drivers/usb/gadget/f_mtp.c index 8128b203e76f..92dd89b340bc 100644 --- a/drivers/usb/gadget/f_mtp.c +++ b/drivers/usb/gadget/f_mtp.c @@ -504,6 +504,7 @@ requeue_req: ret = wait_event_interruptible(dev->read_wq, dev->rx_done); if (ret < 0) { r = ret; + usb_ep_dequeue(dev->ep_out, req); goto done; } if (dev->state == STATE_BUSY) {