req->actual == req->length means that there is no data left to enqueue,
so free the request.

Signed-off-by: Felipe F. Tonello <e...@felipetonello.com>
---

Changes in v2:
 * Re enqueue not fully completed requests, instead of read ALSA buffers.

 drivers/usb/gadget/function/f_midi.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/gadget/function/f_midi.c 
b/drivers/usb/gadget/function/f_midi.c
index edb84ca..62356cf 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -256,10 +256,12 @@ f_midi_complete(struct usb_ep *ep, struct usb_request 
*req)
                        /* We received stuff. req is queued again, below */
                        f_midi_handle_out_data(ep, req);
                } else if (ep == midi->in_ep) {
-                       /* Our transmit completed. See if there's more to go.
-                        * f_midi_transmit eats req, don't queue it again. */
-                       f_midi_transmit(midi, req);
-                       return;
+                       /* Our transmit completed. If there is no more to go,
+                          don't queue it again. */
+                       if (req->actual == req->length) {
+                               free_ep_req(ep, req);
+                               return;
+                       }
                }
                break;
 
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to