]> git.proxmox.com Git - pve-qemu.git/blame - debian/patches/pve/0057-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch
update submodule and patches to 7.2.0
[pve-qemu.git] / debian / patches / pve / 0057-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch
CommitLineData
7f4326d1
WB
1From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2From: Fabian Ebner <f.ebner@proxmox.com>
3Date: Wed, 25 May 2022 13:59:37 +0200
4Subject: [PATCH] PVE-Backup: create jobs: correctly cancel in error scenario
5
6The first call to job_cancel_sync() will cancel and free all jobs in
7the transaction, so ensure that it's called only once and get rid of
8the job_unref() that would operate on freed memory.
9
10It's also necessary to NULL backup_state.pbs in the error scenario,
11because a subsequent backup_cancel QMP call (as happens in PVE when
12the backup QMP command fails) would try to call proxmox_backup_abort()
13and run into a segfault.
14
d03e1b3c 15Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
7f4326d1 16Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
d03e1b3c
FE
17[FE: adapt for new job lock mechanism replacing AioContext locks]
18Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
7f4326d1
WB
19---
20 pve-backup.c | 10 ++++++++--
21 1 file changed, 8 insertions(+), 2 deletions(-)
22
23diff --git a/pve-backup.c b/pve-backup.c
d03e1b3c 24index 262e7d3894..fde3554133 100644
7f4326d1
WB
25--- a/pve-backup.c
26+++ b/pve-backup.c
d03e1b3c 27@@ -503,6 +503,11 @@ static void create_backup_jobs_bh(void *opaque) {
7f4326d1
WB
28 }
29
30 if (*errp) {
31+ /*
32+ * It's enough to cancel one job in the transaction, the rest will
33+ * follow automatically.
34+ */
35+ bool canceled = false;
36 l = backup_state.di_list;
37 while (l) {
38 PVEBackupDevInfo *di = (PVEBackupDevInfo *)l->data;
d03e1b3c 39@@ -513,11 +518,11 @@ static void create_backup_jobs_bh(void *opaque) {
7f4326d1
WB
40 di->target = NULL;
41 }
42
43- if (di->job) {
44+ if (!canceled && di->job) {
d03e1b3c
FE
45 WITH_JOB_LOCK_GUARD() {
46 job_cancel_sync_locked(&di->job->job, true);
47- job_unref_locked(&di->job->job);
48 }
7f4326d1
WB
49+ canceled = true;
50 }
51 }
52 }
d03e1b3c 53@@ -943,6 +948,7 @@ err:
7f4326d1
WB
54
55 if (pbs) {
56 proxmox_backup_disconnect(pbs);
57+ backup_state.pbs = NULL;
58 }
59
60 if (backup_dir) {