From: Paolo Bonzini <pbonzini@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <famz@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] Revert "qed: Implement .bdrv_drain"
Date: Tue, 8 Mar 2016 13:06:34 +0100 [thread overview]
Message-ID: <56DEC04A.1060501@redhat.com> (raw)
In-Reply-To: <1457431876-8475-1-git-send-email-stefanha@redhat.com>
On 08/03/2016 11:11, Stefan Hajnoczi wrote:
> This reverts commit df9a681dc9ad41c9cdeb9ecc5d060ba9abd27e01.
>
> Note that commit df9a681dc9ad41c9cdeb9ecc5d060ba9abd27e01 included some
> unrelated hunks, possibly due to a merge failure or an overlooked
> squash. This only reverts the qed .bdrv_drain() implementation.
>
> The qed .bdrv_drain() implementation is unsafe and can lead to a double
> request completion.
>
> Paolo Bonzini reports:
> "The problem is that bdrv_qed_drain calls qed_plug_allocating_write_reqs
> unconditionally, but this is not correct if an allocating write is
> queued. In this case, qed_unplug_allocating_write_reqs will restart the
> allocating write and possibly cause it to complete. The aiocb however
> is still in use for the L2/L1 table writes, and will then be completed
> again as soon as the table writes are stable."
>
> For QEMU 2.6 we can simply revert this commit. A full solution for the
> qed need check timer may be added if the bdrv_drain() implementation is
> extended.
>
> Reported-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Paolo
> ---
> block/qed.c | 13 -------------
> 1 file changed, 13 deletions(-)
>
> Passes ./check -qed.
>
> diff --git a/block/qed.c b/block/qed.c
> index 404be1e..3da8021 100644
> --- a/block/qed.c
> +++ b/block/qed.c
> @@ -376,18 +376,6 @@ static void bdrv_qed_attach_aio_context(BlockDriverState *bs,
> }
> }
>
> -static void bdrv_qed_drain(BlockDriverState *bs)
> -{
> - BDRVQEDState *s = bs->opaque;
> -
> - /* Cancel timer and start doing I/O that were meant to happen as if it
> - * fired, that way we get bdrv_drain() taking care of the ongoing requests
> - * correctly. */
> - qed_cancel_need_check_timer(s);
> - qed_plug_allocating_write_reqs(s);
> - bdrv_aio_flush(s->bs, qed_clear_need_check, s);
> -}
> -
> static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags,
> Error **errp)
> {
> @@ -1692,7 +1680,6 @@ static BlockDriver bdrv_qed = {
> .bdrv_check = bdrv_qed_check,
> .bdrv_detach_aio_context = bdrv_qed_detach_aio_context,
> .bdrv_attach_aio_context = bdrv_qed_attach_aio_context,
> - .bdrv_drain = bdrv_qed_drain,
> };
>
> static void bdrv_qed_init(void)
>
next prev parent reply other threads:[~2016-03-08 12:06 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-08 10:11 [Qemu-devel] [PATCH] Revert "qed: Implement .bdrv_drain" Stefan Hajnoczi
2016-03-08 12:06 ` Paolo Bonzini [this message]
2016-03-09 14:52 ` Stefan Hajnoczi
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=56DEC04A.1060501@redhat.com \
--to=pbonzini@redhat.com \
--cc=famz@redhat.com \
--cc=kwolf@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.