[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] mirror: follow AioContext change gracefully
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH v2] mirror: follow AioContext change gracefully |
Date: |
Mon, 13 Jun 2016 11:49:15 +0100 |
User-agent: |
Mutt/1.6.1 (2016-04-27) |
On Sun, Jun 12, 2016 at 02:51:04PM +0800, Fam Zheng wrote:
> @@ -119,7 +121,7 @@ static void mirror_iteration_done(MirrorOp *op, int ret)
> qemu_iovec_destroy(&op->qiov);
> g_free(op);
>
> - if (s->waiting_for_io) {
> + if (s->waiting_for_io && !s->quiesce_requested) {
> qemu_coroutine_enter(s->common.co, NULL);
> }
Is it necessary to interact with s->waiting_for_io? The coroutine
should reach a quiescent point later on anyway so it would be simpler to
leave this unchanged.
> +static void mirror_detach_aio_context(void *opaque)
> +{
> + MirrorBlockJob *s = opaque;
> +
> + /* Complete pending write requests */
> + assert(!s->quiesce_requested);
> + s->quiesce_requested = true;
> + while (s->quiesce_requested || s->in_flight) {
> + aio_poll(blk_get_aio_context(s->common.blk), true);
> + }
> +}
Adding synchronous aio_poll() loops will bite us in the future. For
example, if a guest resets the virtio device the vcpu will be hung until
I/O completes and sleeps finish. This flaw in QEMU already exists today
and won't be fixed any time soon, so I guess this approach is okay...
Stefan
signature.asc
Description: PGP signature