]> git.proxmox.com Git - pve-qemu-kvm.git/blame - debian/patches/backup-modify-job-api.patch
refresh and enable debian/patches/disable-efi-enable-pxe-roms.patch
[pve-qemu-kvm.git] / debian / patches / backup-modify-job-api.patch
CommitLineData
cbf9030a
DM
1Index: new/block/backup.c
2===================================================================
38f36829
DM
3--- new.orig/block/backup.c 2014-05-05 06:55:25.000000000 +0200
4+++ new/block/backup.c 2014-05-05 09:24:11.000000000 +0200
cbf9030a
DM
5@@ -39,6 +39,7 @@
6 BlockDriverState *target;
7 MirrorSyncMode sync_mode;
8 RateLimit limit;
9+ BackupDumpFunc *dump_cb;
10 BlockdevOnError on_source_error;
11 BlockdevOnError on_target_error;
12 CoRwlock flush_rwlock;
38f36829 13@@ -136,14 +137,21 @@
5cf8ed03 14 goto out;
cbf9030a
DM
15 }
16
5cf8ed03 17+ int64_t start_sec = start * BACKUP_SECTORS_PER_CLUSTER;
cbf9030a
DM
18 if (buffer_is_zero(iov.iov_base, iov.iov_len)) {
19- ret = bdrv_co_write_zeroes(job->target,
38f36829
DM
20- start * BACKUP_SECTORS_PER_CLUSTER,
21- n, BDRV_REQ_MAY_UNMAP);
cbf9030a 22+ if (job->dump_cb) {
5cf8ed03
DM
23+ ret = job->dump_cb(job->common.opaque, job->target, start_sec, n, NULL);
24+ }
25+ if (job->target) {
38f36829 26+ ret = bdrv_co_write_zeroes(job->target, start_sec, n, BDRV_REQ_MAY_UNMAP);
cbf9030a
DM
27+ }
28 } else {
29- ret = bdrv_co_writev(job->target,
30- start * BACKUP_SECTORS_PER_CLUSTER, n,
31- &bounce_qiov);
32+ if (job->dump_cb) {
5cf8ed03
DM
33+ ret = job->dump_cb(job->common.opaque, job->target, start_sec, n, bounce_buffer);
34+ }
35+ if (job->target) {
36+ ret = bdrv_co_writev(job->target, start_sec, n, &bounce_qiov);
cbf9030a
DM
37+ }
38 }
39 if (ret < 0) {
40 trace_backup_do_cow_write_fail(job, start, ret);
38f36829 41@@ -205,7 +213,9 @@
cbf9030a
DM
42 {
43 BackupBlockJob *s = container_of(job, BackupBlockJob, common);
44
45- bdrv_iostatus_reset(s->target);
46+ if (s->target) {
47+ bdrv_iostatus_reset(s->target);
48+ }
49 }
50
51 static const BlockJobDriver backup_job_driver = {
38f36829 52@@ -221,9 +231,11 @@
cbf9030a
DM
53 if (read) {
54 return block_job_error_action(&job->common, job->common.bs,
55 job->on_source_error, true, error);
56- } else {
57+ } else if (job->target) {
58 return block_job_error_action(&job->common, job->target,
59 job->on_target_error, false, error);
60+ } else {
61+ return BDRV_ACTION_REPORT;
62 }
63 }
64
38f36829 65@@ -248,9 +260,11 @@
cbf9030a
DM
66
67 job->bitmap = hbitmap_alloc(end, 0);
68
69- bdrv_set_enable_write_cache(target, true);
70- bdrv_set_on_error(target, on_target_error, on_target_error);
71- bdrv_iostatus_enable(target);
72+ if (target) {
73+ bdrv_set_enable_write_cache(target, true);
74+ bdrv_set_on_error(target, on_target_error, on_target_error);
75+ bdrv_iostatus_enable(target);
76+ }
77
78 bdrv_add_before_write_notifier(bs, &before_write);
79
38f36829 80@@ -343,8 +357,10 @@
cbf9030a
DM
81
82 hbitmap_free(job->bitmap);
83
84- bdrv_iostatus_disable(target);
85- bdrv_unref(target);
86+ if (target) {
87+ bdrv_iostatus_disable(target);
88+ bdrv_unref(target);
89+ }
90
91 block_job_completed(&job->common, ret);
92 }
38f36829 93@@ -353,13 +369,15 @@
cbf9030a
DM
94 int64_t speed, MirrorSyncMode sync_mode,
95 BlockdevOnError on_source_error,
96 BlockdevOnError on_target_error,
97+ BackupDumpFunc *dump_cb,
98 BlockDriverCompletionFunc *cb, void *opaque,
bd240f3b 99+ bool paused,
cbf9030a
DM
100 Error **errp)
101 {
102 int64_t len;
103
104 assert(bs);
105- assert(target);
106+ assert(target || dump_cb);
107 assert(cb);
108
109 if ((on_source_error == BLOCKDEV_ON_ERROR_STOP ||
38f36829 110@@ -382,10 +400,12 @@
cbf9030a
DM
111 return;
112 }
113
114+ job->dump_cb = dump_cb;
115 job->on_source_error = on_source_error;
116 job->on_target_error = on_target_error;
117 job->target = target;
bd240f3b
DM
118 job->sync_mode = sync_mode;
119+ job->common.paused = paused;
120 job->common.len = len;
121 job->common.co = qemu_coroutine_create(backup_run);
122 qemu_coroutine_enter(job->common.co, job);
cbf9030a
DM
123Index: new/blockdev.c
124===================================================================
38f36829
DM
125--- new.orig/blockdev.c 2014-05-05 06:55:26.000000000 +0200
126+++ new/blockdev.c 2014-05-05 09:16:48.000000000 +0200
127@@ -2030,7 +2030,7 @@
cbf9030a
DM
128 }
129
130 backup_start(bs, target_bs, speed, sync, on_source_error, on_target_error,
131- block_job_cb, bs, &local_err);
bd240f3b 132+ NULL, block_job_cb, bs, false, &local_err);
cbf9030a
DM
133 if (local_err != NULL) {
134 bdrv_unref(target_bs);
135 error_propagate(errp, local_err);
136Index: new/include/block/block_int.h
137===================================================================
38f36829
DM
138--- new.orig/include/block/block_int.h 2014-05-05 06:55:26.000000000 +0200
139+++ new/include/block/block_int.h 2014-05-05 09:16:48.000000000 +0200
140@@ -55,6 +55,9 @@
cbf9030a 141 #define BLOCK_OPT_ADAPTER_TYPE "adapter_type"
38f36829 142 #define BLOCK_OPT_REDUNDANCY "redundancy"
cbf9030a
DM
143
144+typedef int BackupDumpFunc(void *opaque, BlockDriverState *bs,
5cf8ed03 145+ int64_t sector_num, int n_sectors, unsigned char *buf);
cbf9030a
DM
146+
147 typedef struct BdrvTrackedRequest {
148 BlockDriverState *bs;
38f36829
DM
149 int64_t offset;
150@@ -496,7 +499,9 @@
cbf9030a
DM
151 int64_t speed, MirrorSyncMode sync_mode,
152 BlockdevOnError on_source_error,
153 BlockdevOnError on_target_error,
154+ BackupDumpFunc *dump_cb,
155 BlockDriverCompletionFunc *cb, void *opaque,
bd240f3b 156+ bool paused,
cbf9030a
DM
157 Error **errp);
158
bd240f3b 159 #endif /* BLOCK_INT_H */