diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index ec06a1157f51..94a0d91fafa0 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -1185,10 +1185,12 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) interrupted = true; if (ep->ep) { usb_ep_dequeue(ep->ep, req); + spin_unlock_irq(&epfile->ffs->eps_lock); wait_for_completion(&done); interrupted = ep->status < 0; + } else { + spin_unlock_irq(&epfile->ffs->eps_lock); } - spin_unlock_irq(&epfile->ffs->eps_lock); } ffs_log("%s:ep status %d for req %pK", epfile->name, ep->status,