bool buf_done;
        int ret;
 
-       if (video->ep->enabled && uvc->state == UVC_STATE_STREAMING) {
+       while (video->ep->enabled && uvc->state == UVC_STATE_STREAMING) {
                /*
                 * Retrieve the first available USB request, protected by the
                 * request lock.
                }
                req = list_first_entry(&video->req_free, struct usb_request,
                                        list);
-               if (!req) {
-                       spin_unlock_irqrestore(&video->req_lock, flags);
-                       return;
-               }
-
                list_del(&req->list);
                spin_unlock_irqrestore(&video->req_lock, flags);
 
                         * further.
                         */
                        spin_unlock_irqrestore(&queue->irqlock, flags);
-                       goto out;
+                       break;
                }
 
                /*
                /* Queue the USB request */
                ret = uvcg_video_ep_queue(video, req);
                spin_unlock_irqrestore(&queue->irqlock, flags);
+
                if (ret < 0) {
                        uvcg_queue_cancel(queue, 0);
-                       goto out;
+                       break;
                }
 
                /* Endpoint now owns the request */
                req = NULL;
                video->req_int_count++;
-       } else {
-               return;
        }
 
-       if (uvc->state == UVC_STATE_STREAMING)
-               queue_work(video->async_wq, &video->pump);
+       if (!req)
+               return;
 
-       return;
-out:
        spin_lock_irqsave(&video->req_lock, flags);
        list_add_tail(&req->list, &video->req_free);
        spin_unlock_irqrestore(&video->req_lock, flags);