From: Kevin Wolf <kwolf@redhat.com>
To: Ming Lei <ming.lei@canonical.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>,
Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v6 2/3] linux-aio: handling -EAGAIN for !s->io_q.plugged case
Date: Fri, 28 Nov 2014 12:26:31 +0100 [thread overview]
Message-ID: <20141128112631.GC4035@noname.redhat.com> (raw)
In-Reply-To: <CACVXFVPEjVgZ4XOxYdcevaTRBNxfbf3POtp65dhZuheK7KwT=Q@mail.gmail.com>
Am 28.11.2014 um 03:27 hat Ming Lei geschrieben:
> Hi Kevin,
>
> On Wed, Nov 26, 2014 at 7:27 PM, Kevin Wolf <kwolf@redhat.com> wrote:
> > Am 25.11.2014 um 08:23 hat Ming Lei geschrieben:
> >> Previously -EAGAIN is simply ignored for !s->io_q.plugged case,
> >> and sometimes it is easy to cause -EIO to VM, such as NVME device.
> >>
> >> This patch handles -EAGAIN by io queue for !s->io_q.plugged case,
> >> and it will be retried in following aio completion cb.
> >>
> >> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> >> Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
> >> Signed-off-by: Ming Lei <ming.lei@canonical.com>
> >> ---
> >> block/linux-aio.c | 24 ++++++++++++++++--------
> >> 1 file changed, 16 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/block/linux-aio.c b/block/linux-aio.c
> >> index 11ac828..ac25722 100644
> >> --- a/block/linux-aio.c
> >> +++ b/block/linux-aio.c
> >> @@ -282,8 +282,13 @@ static int ioq_enqueue(struct qemu_laio_state *s, struct iocb *iocb)
> >> s->io_q.iocbs[idx++] = iocb;
> >> s->io_q.idx = idx;
> >>
> >> - /* submit immediately if queue depth is above 2/3 */
> >> - if (idx > s->io_q.size * 2 / 3) {
> >> + /*
> >> + * This is reached in two cases: queue not plugged but io_submit
> >> + * returned -EAGAIN, or queue plugged. In the latter case, start
> >> + * submitting some I/O if the queue is getting too full. In the
> >> + * former case, instead, wait until an I/O operation is completed.
> >> + */
> >
> > Are we guaranteed that an I/O operation is in flight when we get
> > -EAGAIN? The manpage of io_submit isn't very clear on this,
> > "insufficient resources" could be for any reason.
> >
>
> That is a good question.
>
> From fs/aio.c in linux kernel, io_submit_one() returns -EAGAIN when
> either there isn't enough requests which are reserved in io_setup(), or
> kmem_cache_alloc(GFP_KERNEL) returns NULL.
>
> In the former case, it means I/O operation is in flight.
>
> In the later case, it should be very difficult to trigger since GFP_KERNEL
> allocation will wait for memory reclaiming.
>
> So most of times, it is reasonable to resubmit in completion for
> -EAGAIN. When there is no pending I/O, we still can handle
> the very unlikely case either by returning failure to caller or
> try to submit in one BH. Does it make sense for you?
I think returning an error is fine in this case.
Kevin
next prev parent reply other threads:[~2014-11-28 11:26 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-25 7:23 [Qemu-devel] [PATCH v6 0/3] linux-aio: fix batch submission Ming Lei
2014-11-25 7:23 ` [Qemu-devel] [PATCH v6 1/3] linux-aio: fix submit aio as a batch Ming Lei
2014-11-25 13:08 ` Stefan Hajnoczi
2014-11-25 14:45 ` Ming Lei
2014-11-25 16:18 ` Stefan Hajnoczi
2014-11-26 9:15 ` Ming Lei
2014-11-27 16:56 ` Stefan Hajnoczi
2014-11-27 16:58 ` Paolo Bonzini
2014-11-28 3:01 ` Ming Lei
2014-11-26 11:18 ` Kevin Wolf
2014-11-28 2:16 ` Ming Lei
2014-11-26 14:48 ` Kevin Wolf
2014-11-25 7:23 ` [Qemu-devel] [PATCH v6 2/3] linux-aio: handling -EAGAIN for !s->io_q.plugged case Ming Lei
2014-11-25 13:14 ` Stefan Hajnoczi
2014-11-26 11:27 ` Kevin Wolf
2014-11-28 2:27 ` Ming Lei
2014-11-28 11:26 ` Kevin Wolf [this message]
2014-11-25 7:23 ` [Qemu-devel] [PATCH v6 3/3] linux-aio: remove 'node' from 'struct qemu_laiocb' Ming Lei
2014-11-25 13:14 ` Stefan Hajnoczi
2014-11-26 11:28 ` Kevin Wolf
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=20141128112631.GC4035@noname.redhat.com \
--to=kwolf@redhat.com \
--cc=ming.lei@canonical.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.