|
@@ -1178,12 +1178,14 @@ static bool mirror_drained_poll(BlockJob *job)
|
|
return !!s->in_flight;
|
|
return !!s->in_flight;
|
|
}
|
|
}
|
|
|
|
|
|
-static void mirror_cancel(Job *job)
|
|
|
|
|
|
+static void mirror_cancel(Job *job, bool force)
|
|
{
|
|
{
|
|
MirrorBlockJob *s = container_of(job, MirrorBlockJob, common.job);
|
|
MirrorBlockJob *s = container_of(job, MirrorBlockJob, common.job);
|
|
BlockDriverState *target = blk_bs(s->target);
|
|
BlockDriverState *target = blk_bs(s->target);
|
|
|
|
|
|
- bdrv_cancel_in_flight(target);
|
|
|
|
|
|
+ if (force || !job_is_ready(job)) {
|
|
|
|
+ bdrv_cancel_in_flight(target);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
static const BlockJobDriver mirror_job_driver = {
|
|
static const BlockJobDriver mirror_job_driver = {
|