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