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