qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH 03/54] mirror: Resize active commit base in mirr


From: Fam Zheng
Subject: Re: [Qemu-block] [PATCH 03/54] mirror: Resize active commit base in mirror_run()
Date: Thu, 23 Feb 2017 19:31:34 +0800
User-agent: Mutt/1.7.1 (2016-10-04)

On Tue, 02/21 15:57, Kevin Wolf wrote:
> diff --git a/block/mirror.c b/block/mirror.c
> index 698a54e..13f793e 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -657,7 +657,28 @@ static void coroutine_fn mirror_run(void *opaque)
>      if (s->bdev_length < 0) {
>          ret = s->bdev_length;
>          goto immediate_exit;
> -    } else if (s->bdev_length == 0) {
> +    }
> +
> +    /* Active commit must resize the base image if its size differs from the
> +     * active layer. */
> +    if (s->base == blk_bs(s->target)) {
> +        int64_t base_length;
> +
> +        base_length = blk_getlength(s->target);
> +        if (base_length < 0) {
> +            ret = base_length;
> +            goto immediate_exit;
> +        }
> +
> +        if (s->bdev_length > base_length) {
> +            ret = blk_truncate(s->target, s->bdev_length);
> +            if (ret < 0) {
> +                goto immediate_exit;
> +            }
> +        }
> +    }
> +
> +    if (s->bdev_length == 0) {
>          /* Report BLOCK_JOB_READY and wait for complete. */
>          block_job_event_ready(&s->common);
>          s->synced = true;

This has a slight behavior change of commit job that previously upon resize
failure the job wouldn't start, but now it will, then immediately end with an
error. Not an problem, though.

Fam



reply via email to

[Prev in Thread] Current Thread [Next in Thread]