Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83196b52 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

[PATCH] gadgetfs: fix AIO interface bugs



This patch (as691) fixes a few errors in the AIO interface for the
gadgetfs driver.  Now requests will complete properly instead of hanging.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 212a4b4e
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -528,7 +528,7 @@ struct kiocb_priv {
	struct usb_request	*req;
	struct ep_data		*epdata;
	void			*buf;
	char __user		*ubuf;
	char __user		*ubuf;		/* NULL for writes */
	unsigned		actual;
};

@@ -566,7 +566,6 @@ static ssize_t ep_aio_read_retry(struct kiocb *iocb)
		status = priv->actual;
	kfree(priv->buf);
	kfree(priv);
	aio_put_req(iocb);
	return status;
}

@@ -580,8 +579,8 @@ static void ep_aio_complete(struct usb_ep *ep, struct usb_request *req)
	spin_lock(&epdata->dev->lock);
	priv->req = NULL;
	priv->epdata = NULL;
	if (NULL == iocb->ki_retry
			|| unlikely(0 == req->actual)
	if (priv->ubuf == NULL
			|| unlikely(req->actual == 0)
			|| unlikely(kiocbIsCancelled(iocb))) {
		kfree(req->buf);
		kfree(priv);
@@ -618,7 +617,7 @@ ep_aio_rwtail(
	char __user	*ubuf
)
{
	struct kiocb_priv	*priv = (void *) &iocb->private;
	struct kiocb_priv	*priv;
	struct usb_request	*req;
	ssize_t			value;

@@ -670,7 +669,7 @@ ep_aio_rwtail(
		kfree(priv);
		put_ep(epdata);
	} else
		value = -EIOCBQUEUED;
		value = (ubuf ? -EIOCBRETRY : -EIOCBQUEUED);
	return value;
}