re-export patches in normalized form
iow. using: git format-patch --zero-commit --no-signature --no-numbered --diff-algorithm=myers ... Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
539e333eaa
commit
4fd0fa7fb3
@ -9,7 +9,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 11 insertions(+), 4 deletions(-)
|
1 file changed, 11 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/block/gluster.c b/block/gluster.c
|
diff --git a/block/gluster.c b/block/gluster.c
|
||||||
index 398976bc66..523304835e 100644
|
index 592e71b22a..aebfece6eb 100644
|
||||||
--- a/block/gluster.c
|
--- a/block/gluster.c
|
||||||
+++ b/block/gluster.c
|
+++ b/block/gluster.c
|
||||||
@@ -42,7 +42,7 @@
|
@@ -42,7 +42,7 @@
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 2 insertions(+)
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
diff --git a/block/rbd.c b/block/rbd.c
|
diff --git a/block/rbd.c b/block/rbd.c
|
||||||
index 8f183eba2a..458f6bd7eb 100644
|
index def96292e0..a4b8fb482c 100644
|
||||||
--- a/block/rbd.c
|
--- a/block/rbd.c
|
||||||
+++ b/block/rbd.c
|
+++ b/block/rbd.c
|
||||||
@@ -820,6 +820,8 @@ static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
|
@@ -820,6 +820,8 @@ static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/block/gluster.c b/block/gluster.c
|
diff --git a/block/gluster.c b/block/gluster.c
|
||||||
index 523304835e..80b75cb96c 100644
|
index aebfece6eb..3b7ee2f649 100644
|
||||||
--- a/block/gluster.c
|
--- a/block/gluster.c
|
||||||
+++ b/block/gluster.c
|
+++ b/block/gluster.c
|
||||||
@@ -57,6 +57,7 @@ typedef struct GlusterAIOCB {
|
@@ -57,6 +57,7 @@ typedef struct GlusterAIOCB {
|
||||||
|
@ -134,11 +134,7 @@ index 080ad9bca7..1f457d9e80 100644
|
|||||||
- error_report_err(local_err);
|
- error_report_err(local_err);
|
||||||
- ret = -1;
|
- ret = -1;
|
||||||
- goto out;
|
- goto out;
|
||||||
+ if (!blk1) {
|
- }
|
||||||
+ ret = -1;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
- if (!drv->create_opts) {
|
- if (!drv->create_opts) {
|
||||||
- error_report("Format driver '%s' does not support image creation",
|
- error_report("Format driver '%s' does not support image creation",
|
||||||
- drv->format_name);
|
- drv->format_name);
|
||||||
@ -150,12 +146,16 @@ index 080ad9bca7..1f457d9e80 100644
|
|||||||
- proto_drv->format_name);
|
- proto_drv->format_name);
|
||||||
- ret = -1;
|
- ret = -1;
|
||||||
- goto out;
|
- goto out;
|
||||||
- }
|
+ if (!blk1) {
|
||||||
|
+ ret = -1;
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
- create_opts = qemu_opts_append(create_opts, drv->create_opts);
|
- create_opts = qemu_opts_append(create_opts, drv->create_opts);
|
||||||
- create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
|
- create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
|
||||||
-
|
|
||||||
- opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
|
|
||||||
|
|
||||||
|
- opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
|
||||||
|
-
|
||||||
- size = blk_getlength(blk1);
|
- size = blk_getlength(blk1);
|
||||||
- if (size < 0) {
|
- if (size < 0) {
|
||||||
- error_report("Failed to get size for '%s'", in.filename);
|
- error_report("Failed to get size for '%s'", in.filename);
|
||||||
|
@ -14,9 +14,9 @@ Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
|
|||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||||
---
|
---
|
||||||
block/monitor/block-hmp-cmds.c | 4 ++-
|
block/monitor/block-hmp-cmds.c | 4 ++-
|
||||||
pve-backup.c | 59 ++++++++++++++++++++++++++--------
|
pve-backup.c | 57 +++++++++++++++++++++++++++-------
|
||||||
qapi/block-core.json | 6 ++++
|
qapi/block-core.json | 6 ++++
|
||||||
3 files changed, 55 insertions(+), 14 deletions(-)
|
3 files changed, 54 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c
|
diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c
|
||||||
index 3c06734e6d..4481b60a5c 100644
|
index 3c06734e6d..4481b60a5c 100644
|
||||||
@ -67,17 +67,24 @@ index 1c49cd178d..c15abefdda 100644
|
|||||||
qemu_co_mutex_lock(&backup_state.dump_callback_mutex);
|
qemu_co_mutex_lock(&backup_state.dump_callback_mutex);
|
||||||
|
|
||||||
// avoid deadlock if job is cancelled
|
// avoid deadlock if job is cancelled
|
||||||
@@ -147,16 +152,28 @@ pvebackup_co_dump_pbs_cb(
|
@@ -147,17 +152,29 @@ pvebackup_co_dump_pbs_cb(
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
- pbs_res = proxmox_backup_co_write_data(backup_state.pbs, di->dev_id, buf, start, size, &local_err);
|
- pbs_res = proxmox_backup_co_write_data(backup_state.pbs, di->dev_id, buf, start, size, &local_err);
|
||||||
|
- qemu_co_mutex_unlock(&backup_state.dump_callback_mutex);
|
||||||
+ uint64_t transferred = 0;
|
+ uint64_t transferred = 0;
|
||||||
+ uint64_t reused = 0;
|
+ uint64_t reused = 0;
|
||||||
+ while (transferred < size) {
|
+ while (transferred < size) {
|
||||||
+ uint64_t left = size - transferred;
|
+ uint64_t left = size - transferred;
|
||||||
+ uint64_t to_transfer = left < di->block_size ? left : di->block_size;
|
+ uint64_t to_transfer = left < di->block_size ? left : di->block_size;
|
||||||
+
|
|
||||||
|
- if (pbs_res < 0) {
|
||||||
|
- pvebackup_propagate_error(local_err);
|
||||||
|
- return pbs_res;
|
||||||
|
- } else {
|
||||||
|
- size_t reused = (pbs_res == 0) ? size : 0;
|
||||||
|
- pvebackup_add_transfered_bytes(size, !buf ? size : 0, reused);
|
||||||
+ pbs_res = proxmox_backup_co_write_data(backup_state.pbs, di->dev_id,
|
+ pbs_res = proxmox_backup_co_write_data(backup_state.pbs, di->dev_id,
|
||||||
+ is_zero_block ? NULL : buf + transferred, start + transferred,
|
+ is_zero_block ? NULL : buf + transferred, start + transferred,
|
||||||
+ to_transfer, &local_err);
|
+ to_transfer, &local_err);
|
||||||
@ -90,21 +97,14 @@ index 1c49cd178d..c15abefdda 100644
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ reused += pbs_res == 0 ? to_transfer : 0;
|
+ reused += pbs_res == 0 ? to_transfer : 0;
|
||||||
+ }
|
}
|
||||||
+
|
|
||||||
qemu_co_mutex_unlock(&backup_state.dump_callback_mutex);
|
|
||||||
-
|
|
||||||
- if (pbs_res < 0) {
|
|
||||||
- pvebackup_propagate_error(local_err);
|
|
||||||
- return pbs_res;
|
|
||||||
- } else {
|
|
||||||
- size_t reused = (pbs_res == 0) ? size : 0;
|
|
||||||
- pvebackup_add_transfered_bytes(size, !buf ? size : 0, reused);
|
|
||||||
- }
|
|
||||||
+ pvebackup_add_transfered_bytes(size, is_zero_block ? size : 0, reused);
|
|
||||||
|
|
||||||
|
+ qemu_co_mutex_unlock(&backup_state.dump_callback_mutex);
|
||||||
|
+ pvebackup_add_transfered_bytes(size, is_zero_block ? size : 0, reused);
|
||||||
|
+
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,6 +195,7 @@ pvebackup_co_dump_vma_cb(
|
@@ -178,6 +195,7 @@ pvebackup_co_dump_vma_cb(
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
|
@ -15,8 +15,8 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
[add new force parameter to job_cancel_sync calls]
|
[add new force parameter to job_cancel_sync calls]
|
||||||
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
|
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
|
||||||
---
|
---
|
||||||
pve-backup.c | 169 +++++++++++++++------------------------------------
|
pve-backup.c | 167 +++++++++++++++------------------------------------
|
||||||
1 file changed, 50 insertions(+), 119 deletions(-)
|
1 file changed, 49 insertions(+), 118 deletions(-)
|
||||||
|
|
||||||
diff --git a/pve-backup.c b/pve-backup.c
|
diff --git a/pve-backup.c b/pve-backup.c
|
||||||
index f90abaa50a..63c686463f 100644
|
index f90abaa50a..63c686463f 100644
|
||||||
@ -123,22 +123,8 @@ index f90abaa50a..63c686463f 100644
|
|||||||
proxmox_backup_abort(backup_state.pbs, "backup canceled");
|
proxmox_backup_abort(backup_state.pbs, "backup canceled");
|
||||||
}
|
}
|
||||||
|
|
||||||
+ /* it's enough to cancel one job in the transaction, the rest will follow
|
- qemu_mutex_unlock(&backup_state.backup_mutex);
|
||||||
+ * automatically */
|
-
|
||||||
+ GList *bdi = g_list_first(backup_state.di_list);
|
|
||||||
+ BlockJob *cancel_job = bdi && bdi->data ?
|
|
||||||
+ ((PVEBackupDevInfo *)bdi->data)->job :
|
|
||||||
+ NULL;
|
|
||||||
+
|
|
||||||
+ /* ref the job before releasing the mutex, just to be safe */
|
|
||||||
+ if (cancel_job) {
|
|
||||||
+ job_ref(&cancel_job->job);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* job_cancel_sync may enter the job, so we need to release the
|
|
||||||
+ * backup_mutex to avoid deadlock */
|
|
||||||
qemu_mutex_unlock(&backup_state.backup_mutex);
|
|
||||||
|
|
||||||
- for(;;) {
|
- for(;;) {
|
||||||
-
|
-
|
||||||
- BlockJob *next_job = NULL;
|
- BlockJob *next_job = NULL;
|
||||||
@ -149,16 +135,29 @@ index f90abaa50a..63c686463f 100644
|
|||||||
- while (l) {
|
- while (l) {
|
||||||
- PVEBackupDevInfo *di = (PVEBackupDevInfo *)l->data;
|
- PVEBackupDevInfo *di = (PVEBackupDevInfo *)l->data;
|
||||||
- l = g_list_next(l);
|
- l = g_list_next(l);
|
||||||
-
|
+ /* it's enough to cancel one job in the transaction, the rest will follow
|
||||||
|
+ * automatically */
|
||||||
|
+ GList *bdi = g_list_first(backup_state.di_list);
|
||||||
|
+ BlockJob *cancel_job = bdi && bdi->data ?
|
||||||
|
+ ((PVEBackupDevInfo *)bdi->data)->job :
|
||||||
|
+ NULL;
|
||||||
|
|
||||||
- BlockJob *job = lookup_active_block_job(di);
|
- BlockJob *job = lookup_active_block_job(di);
|
||||||
- if (job != NULL) {
|
- if (job != NULL) {
|
||||||
- next_job = job;
|
- next_job = job;
|
||||||
- break;
|
- break;
|
||||||
- }
|
- }
|
||||||
- }
|
- }
|
||||||
-
|
+ /* ref the job before releasing the mutex, just to be safe */
|
||||||
|
+ if (cancel_job) {
|
||||||
|
+ job_ref(&cancel_job->job);
|
||||||
|
+ }
|
||||||
|
|
||||||
- qemu_mutex_unlock(&backup_state.backup_mutex);
|
- qemu_mutex_unlock(&backup_state.backup_mutex);
|
||||||
-
|
+ /* job_cancel_sync may enter the job, so we need to release the
|
||||||
|
+ * backup_mutex to avoid deadlock */
|
||||||
|
+ qemu_mutex_unlock(&backup_state.backup_mutex);
|
||||||
|
|
||||||
- if (next_job) {
|
- if (next_job) {
|
||||||
- AioContext *aio_context = next_job->job.aio_context;
|
- AioContext *aio_context = next_job->job.aio_context;
|
||||||
- aio_context_acquire(aio_context);
|
- aio_context_acquire(aio_context);
|
||||||
|
@ -210,7 +210,7 @@ index 63c686463f..6f05796fad 100644
|
|||||||
- assert(!qemu_in_coroutine());
|
- assert(!qemu_in_coroutine());
|
||||||
+ PVEBackupDevInfo *di = opaque;
|
+ PVEBackupDevInfo *di = opaque;
|
||||||
+ di->completed_ret = ret;
|
+ di->completed_ret = ret;
|
||||||
|
+
|
||||||
+ /*
|
+ /*
|
||||||
+ * Schedule stream cleanup in async coroutine. close_image and finish might
|
+ * Schedule stream cleanup in async coroutine. close_image and finish might
|
||||||
+ * take a while, so we can't block on them here. This way it also doesn't
|
+ * take a while, so we can't block on them here. This way it also doesn't
|
||||||
@ -235,7 +235,7 @@ index 63c686463f..6f05796fad 100644
|
|||||||
+ aio_context_release(job_ctx);
|
+ aio_context_release(job_ctx);
|
||||||
+ aio_co_enter(data->ctx, data->co);
|
+ aio_co_enter(data->ctx, data->co);
|
||||||
+}
|
+}
|
||||||
+
|
|
||||||
+static void coroutine_fn pvebackup_co_cancel(void *opaque)
|
+static void coroutine_fn pvebackup_co_cancel(void *opaque)
|
||||||
+{
|
+{
|
||||||
Error *cancel_err = NULL;
|
Error *cancel_err = NULL;
|
||||||
@ -311,13 +311,13 @@ index 63c686463f..6f05796fad 100644
|
|||||||
- if (!job || local_err != NULL) {
|
- if (!job || local_err != NULL) {
|
||||||
- Error *create_job_err = NULL;
|
- Error *create_job_err = NULL;
|
||||||
- error_setg(&create_job_err, "backup_job_create failed: %s",
|
- error_setg(&create_job_err, "backup_job_create failed: %s",
|
||||||
|
- local_err ? error_get_pretty(local_err) : "null");
|
||||||
+ di->job = job;
|
+ di->job = job;
|
||||||
+
|
|
||||||
|
- pvebackup_propagate_error(create_job_err);
|
||||||
+ if (!job || local_err) {
|
+ if (!job || local_err) {
|
||||||
+ error_setg(errp, "backup_job_create failed: %s",
|
+ error_setg(errp, "backup_job_create failed: %s",
|
||||||
local_err ? error_get_pretty(local_err) : "null");
|
+ local_err ? error_get_pretty(local_err) : "null");
|
||||||
-
|
|
||||||
- pvebackup_propagate_error(create_job_err);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,10 +18,10 @@ Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
|
|||||||
Acked-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
Acked-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||||
---
|
---
|
||||||
vma-reader.c | 60 ++++++++++---------
|
vma-reader.c | 64 ++++++++++++---------
|
||||||
vma.c | 159 +++++++++++++++++++++++++++++----------------------
|
vma.c | 157 +++++++++++++++++++++++++++++----------------------
|
||||||
vma.h | 2 +-
|
vma.h | 2 +-
|
||||||
3 files changed, 125 insertions(+), 96 deletions(-)
|
3 files changed, 126 insertions(+), 97 deletions(-)
|
||||||
|
|
||||||
diff --git a/vma-reader.c b/vma-reader.c
|
diff --git a/vma-reader.c b/vma-reader.c
|
||||||
index 4f4ee2b47b..844d95a5ba 100644
|
index 4f4ee2b47b..844d95a5ba 100644
|
||||||
@ -63,14 +63,10 @@ index 4f4ee2b47b..844d95a5ba 100644
|
|||||||
+ assert(target != NULL || skip);
|
+ assert(target != NULL || skip);
|
||||||
assert(dev_id);
|
assert(dev_id);
|
||||||
- assert(vmar->rstate[dev_id].target == NULL);
|
- assert(vmar->rstate[dev_id].target == NULL);
|
||||||
+ assert(vmar->rstate[dev_id].target == NULL && !vmar->rstate[dev_id].skip);
|
-
|
||||||
|
|
||||||
- int64_t size = blk_getlength(target);
|
- int64_t size = blk_getlength(target);
|
||||||
- int64_t size_diff = size - vmar->devinfo[dev_id].size;
|
- int64_t size_diff = size - vmar->devinfo[dev_id].size;
|
||||||
+ if (target != NULL) {
|
-
|
||||||
+ int64_t size = blk_getlength(target);
|
|
||||||
+ int64_t size_diff = size - vmar->devinfo[dev_id].size;
|
|
||||||
|
|
||||||
- /* storage types can have different size restrictions, so it
|
- /* storage types can have different size restrictions, so it
|
||||||
- * is not always possible to create an image with exact size.
|
- * is not always possible to create an image with exact size.
|
||||||
- * So we tolerate a size difference up to 4MB.
|
- * So we tolerate a size difference up to 4MB.
|
||||||
@ -80,6 +76,12 @@ index 4f4ee2b47b..844d95a5ba 100644
|
|||||||
- "unexpected size %zd != %zd", vmar->devinfo[dev_id].devname,
|
- "unexpected size %zd != %zd", vmar->devinfo[dev_id].devname,
|
||||||
- size, vmar->devinfo[dev_id].size);
|
- size, vmar->devinfo[dev_id].size);
|
||||||
- return -1;
|
- return -1;
|
||||||
|
+ assert(vmar->rstate[dev_id].target == NULL && !vmar->rstate[dev_id].skip);
|
||||||
|
+
|
||||||
|
+ if (target != NULL) {
|
||||||
|
+ int64_t size = blk_getlength(target);
|
||||||
|
+ int64_t size_diff = size - vmar->devinfo[dev_id].size;
|
||||||
|
+
|
||||||
+ /* storage types can have different size restrictions, so it
|
+ /* storage types can have different size restrictions, so it
|
||||||
+ * is not always possible to create an image with exact size.
|
+ * is not always possible to create an image with exact size.
|
||||||
+ * So we tolerate a size difference up to 4MB.
|
+ * So we tolerate a size difference up to 4MB.
|
||||||
@ -212,25 +214,8 @@ index 89440733b1..21e765a469 100644
|
|||||||
+ } else {
|
+ } else {
|
||||||
+ devname = line + 5;
|
+ devname = line + 5;
|
||||||
+ skip = true;
|
+ skip = true;
|
||||||
}
|
+ }
|
||||||
- }
|
+ } else {
|
||||||
-
|
|
||||||
- uint64_t bps_value = 0;
|
|
||||||
- if (bps) {
|
|
||||||
- bps_value = verify_u64(bps);
|
|
||||||
- g_free(bps);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- const char *path;
|
|
||||||
- bool write_zero;
|
|
||||||
- if (line[0] == '0' && line[1] == ':') {
|
|
||||||
- path = line + 2;
|
|
||||||
- write_zero = false;
|
|
||||||
- } else if (line[0] == '1' && line[1] == ':') {
|
|
||||||
- path = line + 2;
|
|
||||||
- write_zero = true;
|
|
||||||
} else {
|
|
||||||
- g_error("read map failed - parse error ('%s')", inbuf);
|
|
||||||
+ while (1) {
|
+ while (1) {
|
||||||
+ if (!try_parse_option(&line, "format", &format, inbuf) &&
|
+ if (!try_parse_option(&line, "format", &format, inbuf) &&
|
||||||
+ !try_parse_option(&line, "throttling.bps", &bps, inbuf) &&
|
+ !try_parse_option(&line, "throttling.bps", &bps, inbuf) &&
|
||||||
@ -239,13 +224,29 @@ index 89440733b1..21e765a469 100644
|
|||||||
+ {
|
+ {
|
||||||
+ break;
|
+ break;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
}
|
||||||
+
|
- }
|
||||||
|
|
||||||
|
- uint64_t bps_value = 0;
|
||||||
|
- if (bps) {
|
||||||
|
- bps_value = verify_u64(bps);
|
||||||
|
- g_free(bps);
|
||||||
|
- }
|
||||||
+ if (bps) {
|
+ if (bps) {
|
||||||
+ bps_value = verify_u64(bps);
|
+ bps_value = verify_u64(bps);
|
||||||
+ g_free(bps);
|
+ g_free(bps);
|
||||||
+ }
|
+ }
|
||||||
+
|
|
||||||
|
- const char *path;
|
||||||
|
- bool write_zero;
|
||||||
|
- if (line[0] == '0' && line[1] == ':') {
|
||||||
|
- path = line + 2;
|
||||||
|
- write_zero = false;
|
||||||
|
- } else if (line[0] == '1' && line[1] == ':') {
|
||||||
|
- path = line + 2;
|
||||||
|
- write_zero = true;
|
||||||
|
- } else {
|
||||||
|
- g_error("read map failed - parse error ('%s')", inbuf);
|
||||||
+ if (line[0] == '0' && line[1] == ':') {
|
+ if (line[0] == '0' && line[1] == ':') {
|
||||||
+ path = line + 2;
|
+ path = line + 2;
|
||||||
+ write_zero = false;
|
+ write_zero = false;
|
||||||
|
@ -202,7 +202,7 @@ index 9f6c04a512..f6a5f8c785 100644
|
|||||||
backup_time,
|
backup_time,
|
||||||
dump_cb_block_size,
|
dump_cb_block_size,
|
||||||
diff --git a/qapi/block-core.json b/qapi/block-core.json
|
diff --git a/qapi/block-core.json b/qapi/block-core.json
|
||||||
index c5023710f5..619e13b9b1 100644
|
index d089328a1f..705f0c97ba 100644
|
||||||
--- a/qapi/block-core.json
|
--- a/qapi/block-core.json
|
||||||
+++ b/qapi/block-core.json
|
+++ b/qapi/block-core.json
|
||||||
@@ -821,6 +821,8 @@
|
@@ -821,6 +821,8 @@
|
||||||
@ -231,6 +231,3 @@ index c5023710f5..619e13b9b1 100644
|
|||||||
|
|
||||||
##
|
##
|
||||||
# @BlockdevOptionsNVMe:
|
# @BlockdevOptionsNVMe:
|
||||||
--
|
|
||||||
2.30.2
|
|
||||||
|
|
||||||
|
@ -17,14 +17,14 @@ freed. With unlucky timings it seems possible that:
|
|||||||
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
|
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
|
||||||
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
||||||
---
|
---
|
||||||
pve-backup.c | 13 +++++++++++++
|
pve-backup.c | 25 ++++++++++++++++++++-----
|
||||||
1 file changed, 13 insertions(+)
|
1 file changed, 20 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
Index: pve-qemu-kvm-6.2.0/pve-backup.c
|
diff --git a/pve-backup.c b/pve-backup.c
|
||||||
===================================================================
|
index 5bed6f4014..0c34428713 100644
|
||||||
--- pve-qemu-kvm-6.2.0.orig/pve-backup.c
|
--- a/pve-backup.c
|
||||||
+++ pve-qemu-kvm-6.2.0/pve-backup.c
|
+++ b/pve-backup.c
|
||||||
@@ -316,6 +316,14 @@ static void coroutine_fn pvebackup_co_co
|
@@ -316,6 +316,14 @@ static void coroutine_fn pvebackup_co_complete_stream(void *opaque)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ Index: pve-qemu-kvm-6.2.0/pve-backup.c
|
|||||||
// remove self from job list
|
// remove self from job list
|
||||||
backup_state.di_list = g_list_remove(backup_state.di_list, di);
|
backup_state.di_list = g_list_remove(backup_state.di_list, di);
|
||||||
|
|
||||||
@@ -491,9 +499,12 @@ static void create_backup_jobs_bh(void *
|
@@ -491,9 +499,12 @@ static void create_backup_jobs_bh(void *opaque) {
|
||||||
bitmap_mode, false, NULL, &perf, BLOCKDEV_ON_ERROR_REPORT, BLOCKDEV_ON_ERROR_REPORT,
|
bitmap_mode, false, NULL, &perf, BLOCKDEV_ON_ERROR_REPORT, BLOCKDEV_ON_ERROR_REPORT,
|
||||||
JOB_DEFAULT, pvebackup_complete_cb, di, backup_state.txn, &local_err);
|
JOB_DEFAULT, pvebackup_complete_cb, di, backup_state.txn, &local_err);
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ Index: pve-qemu-kvm-6.2.0/pve-backup.c
|
|||||||
|
|
||||||
if (!job || local_err) {
|
if (!job || local_err) {
|
||||||
error_setg(errp, "backup_job_create failed: %s",
|
error_setg(errp, "backup_job_create failed: %s",
|
||||||
@@ -521,12 +532,16 @@ static void create_backup_jobs_bh(void *
|
@@ -521,12 +532,16 @@ static void create_backup_jobs_bh(void *opaque) {
|
||||||
di->target = NULL;
|
di->target = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,10 +37,10 @@ Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
|||||||
1 file changed, 39 insertions(+), 22 deletions(-)
|
1 file changed, 39 insertions(+), 22 deletions(-)
|
||||||
|
|
||||||
diff --git a/pve-backup.c b/pve-backup.c
|
diff --git a/pve-backup.c b/pve-backup.c
|
||||||
index cd45e66a61..be21027dad 100644
|
index 0c34428713..2e22030eec 100644
|
||||||
--- a/pve-backup.c
|
--- a/pve-backup.c
|
||||||
+++ b/pve-backup.c
|
+++ b/pve-backup.c
|
||||||
@@ -352,15 +352,42 @@ static void pvebackup_complete_cb(void *opaque, int ret)
|
@@ -355,15 +355,42 @@ static void pvebackup_complete_cb(void *opaque, int ret)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* job_cancel(_sync) does not like to be called from coroutines, so defer to
|
* job_cancel(_sync) does not like to be called from coroutines, so defer to
|
||||||
@ -89,7 +89,7 @@ index cd45e66a61..be21027dad 100644
|
|||||||
aio_co_enter(data->ctx, data->co);
|
aio_co_enter(data->ctx, data->co);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,22 +408,12 @@ void coroutine_fn qmp_backup_cancel(Error **errp)
|
@@ -384,22 +411,12 @@ void coroutine_fn qmp_backup_cancel(Error **errp)
|
||||||
proxmox_backup_abort(backup_state.pbs, "backup canceled");
|
proxmox_backup_abort(backup_state.pbs, "backup canceled");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user