block/backup: implement .cancel job handler
Cancel in-flight io on target to not waste the time. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20210205163720.887197-10-vsementsov@virtuozzo.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
d00dd63135
commit
ff789bf5a9
@ -35,6 +35,7 @@ typedef struct BackupBlockJob {
|
|||||||
BlockJob common;
|
BlockJob common;
|
||||||
BlockDriverState *backup_top;
|
BlockDriverState *backup_top;
|
||||||
BlockDriverState *source_bs;
|
BlockDriverState *source_bs;
|
||||||
|
BlockDriverState *target_bs;
|
||||||
|
|
||||||
BdrvDirtyBitmap *sync_bitmap;
|
BdrvDirtyBitmap *sync_bitmap;
|
||||||
|
|
||||||
@ -329,6 +330,13 @@ static void coroutine_fn backup_set_speed(BlockJob *job, int64_t speed)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void backup_cancel(Job *job)
|
||||||
|
{
|
||||||
|
BackupBlockJob *s = container_of(job, BackupBlockJob, common.job);
|
||||||
|
|
||||||
|
bdrv_cancel_in_flight(s->target_bs);
|
||||||
|
}
|
||||||
|
|
||||||
static const BlockJobDriver backup_job_driver = {
|
static const BlockJobDriver backup_job_driver = {
|
||||||
.job_driver = {
|
.job_driver = {
|
||||||
.instance_size = sizeof(BackupBlockJob),
|
.instance_size = sizeof(BackupBlockJob),
|
||||||
@ -340,6 +348,7 @@ static const BlockJobDriver backup_job_driver = {
|
|||||||
.abort = backup_abort,
|
.abort = backup_abort,
|
||||||
.clean = backup_clean,
|
.clean = backup_clean,
|
||||||
.pause = backup_pause,
|
.pause = backup_pause,
|
||||||
|
.cancel = backup_cancel,
|
||||||
},
|
},
|
||||||
.set_speed = backup_set_speed,
|
.set_speed = backup_set_speed,
|
||||||
};
|
};
|
||||||
@ -528,6 +537,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
|
|||||||
|
|
||||||
job->backup_top = backup_top;
|
job->backup_top = backup_top;
|
||||||
job->source_bs = bs;
|
job->source_bs = bs;
|
||||||
|
job->target_bs = target;
|
||||||
job->on_source_error = on_source_error;
|
job->on_source_error = on_source_error;
|
||||||
job->on_target_error = on_target_error;
|
job->on_target_error = on_target_error;
|
||||||
job->sync_mode = sync_mode;
|
job->sync_mode = sync_mode;
|
||||||
|
Loading…
Reference in New Issue
Block a user