On 20/05/2015 08:16, Fam Zheng wrote: > > static void mirror_exit(BlockJob *job, void *opaque) > @@ -328,6 +330,8 @@ static void mirror_exit(BlockJob *job, void *opaque) > MirrorExitData *data = opaque; > AioContext *replace_aio_context = NULL; > > + bdrv_op_unblock(s->common.bs, BLOCK_OP_TYPE_DEVICE_IO, data->blocker); > + error_free(data->blocker); > if (s->to_replace) { > replace_aio_context = bdrv_get_aio_context(s->to_replace); > aio_context_acquire(replace_aio_context);
Why here and not after the "if (s->should_complete && data->ret == 0) { ... }"? The commit message says "unblock it after bdrv_swap()." This is the only remaining issue. Paolo