OSDN Git Service

staging: emxx_udc: Fix invalid reference error
authorJavier F. Arias <jarias.linux@gmail.com>
Wed, 30 Oct 2019 03:04:19 +0000 (22:04 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Oct 2019 09:38:46 +0000 (10:38 +0100)
This patch fixes an invalid reference error by moving the code that
is executed when a queue element is found, into the loop. Also, it
removes an unnecessary test that now checks if the element is not
present in the queue.
Issue found by Coccinelle.

Signed-off-by: Javier F. Arias <jarias.linux@gmail.com>
Link: https://lore.kernel.org/r/20191030030419.mmnrzm7hr4encfai@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/emxx_udc/emxx_udc.c

index e899130..03929b9 100644 (file)
@@ -2660,20 +2660,18 @@ static int nbu2ss_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
 
        /* make sure it's actually queued on this endpoint */
        list_for_each_entry(req, &ep->queue, queue) {
-               if (&req->req == _req)
-                       break;
-       }
-       if (&req->req != _req) {
-               spin_unlock_irqrestore(&udc->lock, flags);
-               pr_debug("%s no queue(EINVAL)\n", __func__);
-               return -EINVAL;
+               if (&req->req == _req) {
+                       _nbu2ss_ep_done(ep, req, -ECONNRESET);
+                       spin_unlock_irqrestore(&udc->lock, flags);
+                       return 0;
+               }
        }
 
-       _nbu2ss_ep_done(ep, req, -ECONNRESET);
-
        spin_unlock_irqrestore(&udc->lock, flags);
 
-       return 0;
+       pr_debug("%s no queue(EINVAL)\n", __func__);
+
+       return -EINVAL;
 }
 
 /*-------------------------------------------------------------------------*/