On Wed, Feb 13, 2013 at 02:22:09PM +0100, Kevin Wolf wrote:
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 57552aa..2819336 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -774,11 +774,33 @@ static void coroutine_fn process_l2meta(void *opaque)
>          m->sleeping = false;
>      }
>  
> +again:
>      qemu_co_mutex_lock(&s->lock);
>  
>      ret = qcow2_alloc_cluster_link_l2(bs, m);
>      if (ret < 0) {
> -        /* FIXME */
> +        /*
> +         * This is a nasty situation: We have already completed the 
> allocation
> +         * write request and returned success, so just failing it isn't
> +         * possible. We need to make sure to return an error during the next
> +         * flush.
> +         *
> +         * However, we still can't drop the l2meta because we want I/O errors
> +         * to be recoverable e.g. after the block device has been grown or 
> the
> +         * network connection restored. Sleep until the next flush comes and
> +         * then retry.
> +         */

A failed flush is live migrated by hw/virtio-blk.c but what happens when
we fail during drain?

Reply via email to