]>
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 | |
53e83913 | 4 | Subject: [PATCH] PVE: 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. | |
b855dce7 TL |
10 | |
11 | Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com> | |
67af0fa4 WB |
12 | --- |
13 | block/backup.c | 2 ++ | |
14 | block/replication.c | 2 +- | |
15 | blockdev.c | 4 ++-- | |
67af0fa4 | 16 | include/block/block_int.h | 1 + |
53e83913 | 17 | job.c | 2 +- |
67af0fa4 WB |
18 | 5 files changed, 7 insertions(+), 4 deletions(-) |
19 | ||
20 | diff --git a/block/backup.c b/block/backup.c | |
91726598 | 21 | index 8761f1f9a7..30008fcc34 100644 |
67af0fa4 WB |
22 | --- a/block/backup.c |
23 | +++ b/block/backup.c | |
be901f66 | 24 | @@ -550,6 +550,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, |
67af0fa4 WB |
25 | BlockdevOnError on_target_error, |
26 | int creation_flags, | |
27 | BlockCompletionFunc *cb, void *opaque, | |
28 | + int pause_count, | |
53e83913 | 29 | JobTxn *txn, Error **errp) |
67af0fa4 WB |
30 | { |
31 | int64_t len; | |
91726598 | 32 | @@ -675,6 +676,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, |
67af0fa4 WB |
33 | block_job_add_bdrv(&job->common, "target", target, 0, BLK_PERM_ALL, |
34 | &error_abort); | |
53e83913 | 35 | job->len = len; |
0775f12b | 36 | + job->common.job.pause_count += pause_count; |
67af0fa4 WB |
37 | |
38 | return &job->common; | |
53e83913 | 39 | |
67af0fa4 | 40 | diff --git a/block/replication.c b/block/replication.c |
be901f66 | 41 | index 23b2993d74..e70a6cf2bd 100644 |
67af0fa4 WB |
42 | --- a/block/replication.c |
43 | +++ b/block/replication.c | |
be901f66 | 44 | @@ -546,7 +546,7 @@ static void replication_start(ReplicationState *rs, ReplicationMode mode, |
67af0fa4 WB |
45 | 0, MIRROR_SYNC_MODE_NONE, NULL, false, |
46 | BLOCKDEV_ON_ERROR_REPORT, | |
53e83913 | 47 | BLOCKDEV_ON_ERROR_REPORT, JOB_INTERNAL, |
67af0fa4 WB |
48 | - backup_job_completed, bs, NULL, &local_err); |
49 | + backup_job_completed, bs, 0, NULL, &local_err); | |
50 | if (local_err) { | |
51 | error_propagate(errp, local_err); | |
52 | backup_job_cleanup(bs); | |
53 | diff --git a/blockdev.c b/blockdev.c | |
be901f66 | 54 | index 4d141e9a1f..a7c97b1585 100644 |
67af0fa4 WB |
55 | --- a/blockdev.c |
56 | +++ b/blockdev.c | |
be901f66 | 57 | @@ -3574,7 +3574,7 @@ static BlockJob *do_drive_backup(DriveBackup *backup, JobTxn *txn, |
67af0fa4 WB |
58 | job = backup_job_create(backup->job_id, bs, target_bs, backup->speed, |
59 | backup->sync, bmap, backup->compress, | |
60 | backup->on_source_error, backup->on_target_error, | |
53e83913 WB |
61 | - job_flags, NULL, NULL, txn, &local_err); |
62 | + job_flags, NULL, NULL, 0, txn, &local_err); | |
67af0fa4 WB |
63 | if (local_err != NULL) { |
64 | error_propagate(errp, local_err); | |
be901f66 SR |
65 | goto unref; |
66 | @@ -3679,7 +3679,7 @@ BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn, | |
67af0fa4 | 67 | job = backup_job_create(backup->job_id, bs, target_bs, backup->speed, |
b855dce7 | 68 | backup->sync, bmap, backup->compress, |
67af0fa4 | 69 | backup->on_source_error, backup->on_target_error, |
53e83913 WB |
70 | - job_flags, NULL, NULL, txn, &local_err); |
71 | + job_flags, NULL, NULL, 0, txn, &local_err); | |
67af0fa4 WB |
72 | if (local_err != NULL) { |
73 | error_propagate(errp, local_err); | |
74 | } | |
67af0fa4 | 75 | diff --git a/include/block/block_int.h b/include/block/block_int.h |
91726598 | 76 | index 05ee6b4866..bb2dddca83 100644 |
67af0fa4 WB |
77 | --- a/include/block/block_int.h |
78 | +++ b/include/block/block_int.h | |
91726598 | 79 | @@ -1173,6 +1173,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, |
67af0fa4 WB |
80 | BlockdevOnError on_target_error, |
81 | int creation_flags, | |
82 | BlockCompletionFunc *cb, void *opaque, | |
83 | + int pause_count, | |
53e83913 | 84 | JobTxn *txn, Error **errp); |
67af0fa4 WB |
85 | |
86 | void hmp_drive_add_node(Monitor *mon, const char *optstr); | |
53e83913 | 87 | diff --git a/job.c b/job.c |
be901f66 | 88 | index 28dd48f8a5..7a21e83780 100644 |
53e83913 WB |
89 | --- a/job.c |
90 | +++ b/job.c | |
be901f66 | 91 | @@ -898,7 +898,7 @@ void job_start(Job *job) |
53e83913 WB |
92 | job->co = qemu_coroutine_create(job_co_entry, job); |
93 | job->pause_count--; | |
94 | job->busy = true; | |
95 | - job->paused = false; | |
96 | + job->paused = job->pause_count > 0; | |
97 | job_state_transition(job, JOB_STATUS_RUNNING); | |
98 | aio_co_enter(job->aio_context, job->co); | |
99 | } |