if (io_data->aio) {
req = usb_ep_alloc_request(ep->ep, GFP_KERNEL);
if (unlikely(!req))
- goto error;
+ goto error_lock;
req->buf = data;
req->length = io_data->len;
ret = usb_ep_queue(ep->ep, req, GFP_ATOMIC);
if (unlikely(ret)) {
usb_ep_free_request(ep->ep, req);
- goto error;
+ goto error_lock;
}
ret = -EIOCBQUEUED;
mutex_unlock(&epfile->mutex);
return ret;
+
+error_lock:
+ spin_unlock_irq(&epfile->ffs->eps_lock);
+ mutex_unlock(&epfile->mutex);
error:
kfree(data);
return ret;