1 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2 From: Wolfgang Bumiller <w.bumiller@proxmox.com>
3 Date: Wed, 9 Dec 2015 15:04:57 +0100
4 Subject: [PATCH] backup: modify job api
6 Introduce a pause_count parameter to start a backup in
7 paused mode. This way backups of multiple drives can be
8 started up sequentially via the completion callback while
9 having been started at the same point in time.
12 block/replication.c | 2 +-
15 include/block/block_int.h | 1 +
16 5 files changed, 7 insertions(+), 4 deletions(-)
18 diff --git a/block/backup.c b/block/backup.c
19 index 99e6bcc748..8c2967a8cb 100644
22 @@ -539,6 +539,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
23 BlockdevOnError on_target_error,
25 BlockCompletionFunc *cb, void *opaque,
27 BlockJobTxn *txn, Error **errp)
30 @@ -663,6 +664,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
31 block_job_add_bdrv(&job->common, "target", target, 0, BLK_PERM_ALL,
33 job->common.len = len;
34 + job->common.pause_count = pause_count;
35 block_job_txn_add_job(txn, &job->common);
38 diff --git a/block/replication.c b/block/replication.c
39 index e41e293d2b..1b08b242eb 100644
40 --- a/block/replication.c
41 +++ b/block/replication.c
42 @@ -561,7 +561,7 @@ static void replication_start(ReplicationState *rs, ReplicationMode mode,
43 0, MIRROR_SYNC_MODE_NONE, NULL, false,
44 BLOCKDEV_ON_ERROR_REPORT,
45 BLOCKDEV_ON_ERROR_REPORT, BLOCK_JOB_INTERNAL,
46 - backup_job_completed, bs, NULL, &local_err);
47 + backup_job_completed, bs, 0, NULL, &local_err);
49 error_propagate(errp, local_err);
50 backup_job_cleanup(bs);
51 diff --git a/blockdev.c b/blockdev.c
52 index 56a6b24a0b..a9ed9034b5 100644
55 @@ -3293,7 +3293,7 @@ static BlockJob *do_drive_backup(DriveBackup *backup, BlockJobTxn *txn,
56 job = backup_job_create(backup->job_id, bs, target_bs, backup->speed,
57 backup->sync, bmap, backup->compress,
58 backup->on_source_error, backup->on_target_error,
59 - BLOCK_JOB_DEFAULT, NULL, NULL, txn, &local_err);
60 + BLOCK_JOB_DEFAULT, NULL, NULL, 0, txn, &local_err);
61 bdrv_unref(target_bs);
62 if (local_err != NULL) {
63 error_propagate(errp, local_err);
64 @@ -3372,7 +3372,7 @@ BlockJob *do_blockdev_backup(BlockdevBackup *backup, BlockJobTxn *txn,
65 job = backup_job_create(backup->job_id, bs, target_bs, backup->speed,
66 backup->sync, NULL, backup->compress,
67 backup->on_source_error, backup->on_target_error,
68 - BLOCK_JOB_DEFAULT, NULL, NULL, txn, &local_err);
69 + BLOCK_JOB_DEFAULT, NULL, NULL, 0, txn, &local_err);
70 if (local_err != NULL) {
71 error_propagate(errp, local_err);
73 diff --git a/blockjob.c b/blockjob.c
74 index 715c2c2680..c1b6b6a810 100644
77 @@ -322,7 +322,7 @@ void block_job_start(BlockJob *job)
78 job->co = qemu_coroutine_create(block_job_co_entry, job);
81 - job->paused = false;
82 + job->paused = job->pause_count > 0;
83 bdrv_coroutine_enter(blk_bs(job->blk), job->co);
86 diff --git a/include/block/block_int.h b/include/block/block_int.h
87 index a5482775ec..1dbbdafd31 100644
88 --- a/include/block/block_int.h
89 +++ b/include/block/block_int.h
90 @@ -985,6 +985,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
91 BlockdevOnError on_target_error,
93 BlockCompletionFunc *cb, void *opaque,
95 BlockJobTxn *txn, Error **errp);
97 void hmp_drive_add_node(Monitor *mon, const char *optstr);