linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff Moyer <jmoyer@redhat.com>
To: Jan Kara <jack@suse.cz>
Cc: linux-fsdevel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	hch@infradead.org, viro@ZenIV.linux.org.uk
Subject: Re: [PATCH] aio: Do not return -ERESTARTSYS (and friends) from AIO
Date: Wed, 18 Aug 2010 14:31:02 -0400	[thread overview]
Message-ID: <x4962z7db89.fsf@segfault.boston.devel.redhat.com> (raw)
In-Reply-To: <1277336627-31193-1-git-send-email-jack@suse.cz> (Jan Kara's message of "Thu, 24 Jun 2010 01:43:47 +0200")

Jan Kara <jack@suse.cz> writes:

> We must not leak ERESTARTSYS (and similar error codes) to userspace as a return
> value of IO. Because other AIO could have been already submitted by the same
> io_submit syscall, there is no easy way to restart the syscall. So we do not
> have much other options than fail the particular IO with EINTR.

This is a confusing problem description.  First, I'm assuming you
actually experienced this, is that right?  Care to share the details of
that?

Next, assuming we can get ERSTARTSYS and friends, it will be the return
code of a single iocb (reaped via io_getevents), not the return code of
the io_submit system call.  I'm not saying this is right, I'm just
saying that your description of the problem is misleading.

Cheers,
Jeff

> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
>  fs/aio.c |   12 +++++++++++-
>  1 files changed, 11 insertions(+), 1 deletions(-)
>
>  Not sure who should merge it... Andrew?
>
> diff --git a/fs/aio.c b/fs/aio.c
> index 1ccf25c..66e2d42 100644
> --- a/fs/aio.c
> +++ b/fs/aio.c
> @@ -712,8 +712,18 @@ static ssize_t aio_run_iocb(struct kiocb *iocb)
>  	 */
>  	ret = retry(iocb);
>  
> -	if (ret != -EIOCBRETRY && ret != -EIOCBQUEUED)
> +	if (ret != -EIOCBRETRY && ret != -EIOCBQUEUED) {
> +		/*
> +		 * There's no easy way to restart the syscall since other AIO's
> +		 * may be already running. Just fail this IO with EINTR.
> +		 */
> +		if (unlikely(ret == -ERESTARTSYS ||
> +			     ret == -ERESTARTNOINTR ||
> +			     ret == -ERESTARTNOHAND ||
> +			     ret == -ERESTART_RESTARTBLOCK))
> +			ret = -EINTR;
>  		aio_complete(iocb, ret, 0);
> +	}
>  out:
>  	spin_lock_irq(&ctx->ctx_lock);

      reply	other threads:[~2010-08-18 18:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-23 23:43 [PATCH] aio: Do not return -ERESTARTSYS (and friends) from AIO Jan Kara
2010-08-18 18:31 ` Jeff Moyer [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=x4962z7db89.fsf@segfault.boston.devel.redhat.com \
    --to=jmoyer@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=viro@ZenIV.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).