]>
Commit | Line | Data |
---|---|---|
23102ed6 | 1 | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
67af0fa4 WB |
2 | From: Wolfgang Bumiller <w.bumiller@proxmox.com> |
3 | Date: Wed, 9 Dec 2015 15:04:57 +0100 | |
23102ed6 | 4 | Subject: [PATCH] backup: modify job api |
67af0fa4 WB |
5 | |
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. | |
10 | --- | |
11 | block/backup.c | 2 ++ | |
12 | block/replication.c | 2 +- | |
13 | blockdev.c | 4 ++-- | |
14 | blockjob.c | 2 +- | |
15 | include/block/block_int.h | 1 + | |
16 | 5 files changed, 7 insertions(+), 4 deletions(-) | |
17 | ||
18 | diff --git a/block/backup.c b/block/backup.c | |
6838f038 | 19 | index 99e6bcc748..8c2967a8cb 100644 |
67af0fa4 WB |
20 | --- a/block/backup.c |
21 | +++ b/block/backup.c | |
6838f038 | 22 | @@ -539,6 +539,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, |
67af0fa4 WB |
23 | BlockdevOnError on_target_error, |
24 | int creation_flags, | |
25 | BlockCompletionFunc *cb, void *opaque, | |
26 | + int pause_count, | |
27 | BlockJobTxn *txn, Error **errp) | |
28 | { | |
29 | int64_t len; | |
6838f038 | 30 | @@ -663,6 +664,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, |
67af0fa4 WB |
31 | block_job_add_bdrv(&job->common, "target", target, 0, BLK_PERM_ALL, |
32 | &error_abort); | |
33 | job->common.len = len; | |
34 | + job->common.pause_count = pause_count; | |
35 | block_job_txn_add_job(txn, &job->common); | |
36 | ||
37 | return &job->common; | |
38 | diff --git a/block/replication.c b/block/replication.c | |
6838f038 | 39 | index e41e293d2b..1b08b242eb 100644 |
67af0fa4 WB |
40 | --- a/block/replication.c |
41 | +++ b/block/replication.c | |
6838f038 | 42 | @@ -561,7 +561,7 @@ static void replication_start(ReplicationState *rs, ReplicationMode mode, |
67af0fa4 WB |
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); | |
48 | if (local_err) { | |
49 | error_propagate(errp, local_err); | |
50 | backup_job_cleanup(bs); | |
51 | diff --git a/blockdev.c b/blockdev.c | |
6838f038 | 52 | index 56a6b24a0b..a9ed9034b5 100644 |
67af0fa4 WB |
53 | --- a/blockdev.c |
54 | +++ b/blockdev.c | |
6838f038 | 55 | @@ -3293,7 +3293,7 @@ static BlockJob *do_drive_backup(DriveBackup *backup, BlockJobTxn *txn, |
67af0fa4 WB |
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); | |
6838f038 | 64 | @@ -3372,7 +3372,7 @@ BlockJob *do_blockdev_backup(BlockdevBackup *backup, BlockJobTxn *txn, |
67af0fa4 WB |
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); | |
72 | } | |
73 | diff --git a/blockjob.c b/blockjob.c | |
6838f038 | 74 | index 715c2c2680..c1b6b6a810 100644 |
67af0fa4 WB |
75 | --- a/blockjob.c |
76 | +++ b/blockjob.c | |
6838f038 | 77 | @@ -322,7 +322,7 @@ void block_job_start(BlockJob *job) |
67af0fa4 WB |
78 | job->co = qemu_coroutine_create(block_job_co_entry, job); |
79 | job->pause_count--; | |
80 | job->busy = true; | |
81 | - job->paused = false; | |
82 | + job->paused = job->pause_count > 0; | |
83 | bdrv_coroutine_enter(blk_bs(job->blk), job->co); | |
84 | } | |
85 | ||
86 | diff --git a/include/block/block_int.h b/include/block/block_int.h | |
6838f038 | 87 | index a5482775ec..1dbbdafd31 100644 |
67af0fa4 WB |
88 | --- a/include/block/block_int.h |
89 | +++ b/include/block/block_int.h | |
6838f038 | 90 | @@ -985,6 +985,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, |
67af0fa4 WB |
91 | BlockdevOnError on_target_error, |
92 | int creation_flags, | |
93 | BlockCompletionFunc *cb, void *opaque, | |
94 | + int pause_count, | |
95 | BlockJobTxn *txn, Error **errp); | |
96 | ||
97 | void hmp_drive_add_node(Monitor *mon, const char *optstr); | |
98 | -- | |
99 | 2.11.0 | |
100 |