]>
Commit | Line | Data |
---|---|---|
23102ed6 | 1 | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
67af0fa4 | 2 | From: Wolfgang Bumiller <w.bumiller@proxmox.com> |
83faa3fe TL |
3 | Date: Mon, 6 Apr 2020 12:16:56 +0200 |
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 | 12 | --- |
6402d961 | 13 | block/backup.c | 3 +++ |
67af0fa4 | 14 | block/replication.c | 2 +- |
6402d961 | 15 | blockdev.c | 3 ++- |
67af0fa4 | 16 | include/block/block_int.h | 1 + |
53e83913 | 17 | job.c | 2 +- |
6402d961 | 18 | 5 files changed, 8 insertions(+), 3 deletions(-) |
67af0fa4 WB |
19 | |
20 | diff --git a/block/backup.c b/block/backup.c | |
83faa3fe | 21 | index a7a7dcaf4c..ecd93e91e0 100644 |
67af0fa4 WB |
22 | --- a/block/backup.c |
23 | +++ b/block/backup.c | |
83faa3fe | 24 | @@ -338,6 +338,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; | |
83faa3fe | 32 | @@ -459,6 +460,8 @@ 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); | |
67af0fa4 | 35 | |
6402d961 TL |
36 | + job->common.job.pause_count += pause_count; |
37 | + | |
67af0fa4 | 38 | return &job->common; |
53e83913 | 39 | |
6402d961 | 40 | error: |
67af0fa4 | 41 | diff --git a/block/replication.c b/block/replication.c |
83faa3fe | 42 | index da013c2041..17246a822c 100644 |
67af0fa4 WB |
43 | --- a/block/replication.c |
44 | +++ b/block/replication.c | |
83faa3fe | 45 | @@ -554,7 +554,7 @@ static void replication_start(ReplicationState *rs, ReplicationMode mode, |
6402d961 | 46 | 0, MIRROR_SYNC_MODE_NONE, NULL, 0, false, NULL, |
67af0fa4 | 47 | BLOCKDEV_ON_ERROR_REPORT, |
53e83913 | 48 | BLOCKDEV_ON_ERROR_REPORT, JOB_INTERNAL, |
67af0fa4 WB |
49 | - backup_job_completed, bs, NULL, &local_err); |
50 | + backup_job_completed, bs, 0, NULL, &local_err); | |
51 | if (local_err) { | |
52 | error_propagate(errp, local_err); | |
53 | backup_job_cleanup(bs); | |
54 | diff --git a/blockdev.c b/blockdev.c | |
83faa3fe | 55 | index 5faddaa705..65c358e4ef 100644 |
67af0fa4 WB |
56 | --- a/blockdev.c |
57 | +++ b/blockdev.c | |
83faa3fe | 58 | @@ -3114,7 +3114,8 @@ static BlockJob *do_backup_common(BackupCommon *backup, |
6402d961 TL |
59 | backup->filter_node_name, |
60 | backup->on_source_error, | |
61 | backup->on_target_error, | |
62 | - job_flags, NULL, NULL, txn, errp); | |
63 | + job_flags, NULL, NULL, 0, txn, errp); | |
64 | + | |
65 | return job; | |
66 | } | |
67 | ||
67af0fa4 | 68 | diff --git a/include/block/block_int.h b/include/block/block_int.h |
83faa3fe | 69 | index 4c3587ea19..336f71e69d 100644 |
67af0fa4 WB |
70 | --- a/include/block/block_int.h |
71 | +++ b/include/block/block_int.h | |
83faa3fe | 72 | @@ -1219,6 +1219,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, |
67af0fa4 WB |
73 | BlockdevOnError on_target_error, |
74 | int creation_flags, | |
75 | BlockCompletionFunc *cb, void *opaque, | |
76 | + int pause_count, | |
53e83913 | 77 | JobTxn *txn, Error **errp); |
67af0fa4 | 78 | |
83faa3fe | 79 | BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs, |
53e83913 | 80 | diff --git a/job.c b/job.c |
83faa3fe | 81 | index 53be57a3a0..e82253e041 100644 |
53e83913 WB |
82 | --- a/job.c |
83 | +++ b/job.c | |
83faa3fe | 84 | @@ -918,7 +918,7 @@ void job_start(Job *job) |
53e83913 WB |
85 | job->co = qemu_coroutine_create(job_co_entry, job); |
86 | job->pause_count--; | |
87 | job->busy = true; | |
88 | - job->paused = false; | |
89 | + job->paused = job->pause_count > 0; | |
90 | job_state_transition(job, JOB_STATUS_RUNNING); | |
91 | aio_co_enter(job->aio_context, job->co); | |
92 | } |