Loading drivers/usb/gadget/function/f_mtp.c +11 −1 Original line number Original line Diff line number Diff line Loading @@ -614,7 +614,17 @@ static ssize_t mtp_read(struct file *fp, char __user *buf, } } /* wait for a request to complete */ /* wait for a request to complete */ ret = wait_event_interruptible(dev->read_wq, dev->rx_done); ret = wait_event_interruptible(dev->read_wq, dev->rx_done || dev->state != STATE_BUSY); if (dev->state == STATE_CANCELED) { r = -ECANCELED; if (!dev->rx_done) usb_ep_dequeue(dev->ep_out, req); spin_lock_irq(&dev->lock); dev->state = STATE_CANCELED; spin_unlock_irq(&dev->lock); goto done; } if (ret < 0) { if (ret < 0) { r = ret; r = ret; usb_ep_dequeue(dev->ep_out, req); usb_ep_dequeue(dev->ep_out, req); Loading Loading
drivers/usb/gadget/function/f_mtp.c +11 −1 Original line number Original line Diff line number Diff line Loading @@ -614,7 +614,17 @@ static ssize_t mtp_read(struct file *fp, char __user *buf, } } /* wait for a request to complete */ /* wait for a request to complete */ ret = wait_event_interruptible(dev->read_wq, dev->rx_done); ret = wait_event_interruptible(dev->read_wq, dev->rx_done || dev->state != STATE_BUSY); if (dev->state == STATE_CANCELED) { r = -ECANCELED; if (!dev->rx_done) usb_ep_dequeue(dev->ep_out, req); spin_lock_irq(&dev->lock); dev->state = STATE_CANCELED; spin_unlock_irq(&dev->lock); goto done; } if (ret < 0) { if (ret < 0) { r = ret; r = ret; usb_ep_dequeue(dev->ep_out, req); usb_ep_dequeue(dev->ep_out, req); Loading