From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id B4C0B1FF39B for ; Mon, 17 Jun 2024 13:30:32 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 35E6234B5; Mon, 17 Jun 2024 13:30:35 +0200 (CEST) From: Fiona Ebner To: pve-devel@lists.proxmox.com Date: Mon, 17 Jun 2024 13:29:55 +0200 Message-Id: <20240617112956.111464-1-f.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.058 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH qemu 1/2] PVE Backup: fixup error handling for fleecing X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" The drained section needs to be terminated before breaking out of the loop in the error scenarios. Otherwise, guest IO on the drive would become stuck. Signed-off-by: Fiona Ebner --- .../0050-PVE-backup-add-fleecing-option.patch | 22 ++++++++++--------- ...ve-error-when-copy-before-write-fail.patch | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/debian/patches/pve/0050-PVE-backup-add-fleecing-option.patch b/debian/patches/pve/0050-PVE-backup-add-fleecing-option.patch index dbb2883..d8ad45f 100644 --- a/debian/patches/pve/0050-PVE-backup-add-fleecing-option.patch +++ b/debian/patches/pve/0050-PVE-backup-add-fleecing-option.patch @@ -63,9 +63,9 @@ Signed-off-by: Fiona Ebner Signed-off-by: Thomas Lamprecht --- block/monitor/block-hmp-cmds.c | 1 + - pve-backup.c | 135 ++++++++++++++++++++++++++++++++- + pve-backup.c | 137 ++++++++++++++++++++++++++++++++- qapi/block-core.json | 10 ++- - 3 files changed, 142 insertions(+), 4 deletions(-) + 3 files changed, 144 insertions(+), 4 deletions(-) diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index 5000c084c5..70b3de4c7e 100644 @@ -80,7 +80,7 @@ index 5000c084c5..70b3de4c7e 100644 hmp_handle_error(mon, error); diff --git a/pve-backup.c b/pve-backup.c -index 5ebb6a3947..a747d12d3d 100644 +index 5ebb6a3947..5ea9e1f82f 100644 --- a/pve-backup.c +++ b/pve-backup.c @@ -7,9 +7,11 @@ @@ -134,7 +134,7 @@ index 5ebb6a3947..a747d12d3d 100644 /* * Needs to happen outside of coroutine, because it takes the graph write lock. */ -@@ -519,9 +544,77 @@ static void create_backup_jobs_bh(void *opaque) { +@@ -519,9 +544,79 @@ static void create_backup_jobs_bh(void *opaque) { } bdrv_drained_begin(di->bs); @@ -172,6 +172,7 @@ index 5ebb6a3947..a747d12d3d 100644 + if (!di->fleecing.cbw) { + error_setg(errp, "appending cbw node for fleecing failed: %s", + local_err ? error_get_pretty(local_err) : "unknown error"); ++ bdrv_drained_end(di->bs); + break; + } + @@ -184,6 +185,7 @@ index 5ebb6a3947..a747d12d3d 100644 + if (!di->fleecing.snapshot_access) { + error_setg(errp, "setting up snapshot access for fleecing failed: %s", + local_err ? error_get_pretty(local_err) : "unknown error"); ++ bdrv_drained_end(di->bs); + break; + } + source_bs = di->fleecing.snapshot_access; @@ -214,7 +216,7 @@ index 5ebb6a3947..a747d12d3d 100644 BLOCKDEV_ON_ERROR_REPORT, JOB_DEFAULT, pvebackup_complete_cb, di, backup_state.txn, &local_err); -@@ -577,6 +670,14 @@ static void create_backup_jobs_bh(void *opaque) { +@@ -577,6 +672,14 @@ static void create_backup_jobs_bh(void *opaque) { aio_co_enter(data->ctx, data->co); } @@ -229,7 +231,7 @@ index 5ebb6a3947..a747d12d3d 100644 /* * Returns a list of device infos, which needs to be freed by the caller. In * case of an error, errp will be set, but the returned value might still be a -@@ -584,6 +685,7 @@ static void create_backup_jobs_bh(void *opaque) { +@@ -584,6 +687,7 @@ static void create_backup_jobs_bh(void *opaque) { */ static GList coroutine_fn GRAPH_RDLOCK *get_device_info( const char *devlist, @@ -237,7 +239,7 @@ index 5ebb6a3947..a747d12d3d 100644 Error **errp) { gchar **devs = NULL; -@@ -607,6 +709,31 @@ static GList coroutine_fn GRAPH_RDLOCK *get_device_info( +@@ -607,6 +711,31 @@ static GList coroutine_fn GRAPH_RDLOCK *get_device_info( } PVEBackupDevInfo *di = g_new0(PVEBackupDevInfo, 1); di->bs = bs; @@ -269,7 +271,7 @@ index 5ebb6a3947..a747d12d3d 100644 di_list = g_list_append(di_list, di); d++; } -@@ -656,6 +783,7 @@ UuidInfo coroutine_fn *qmp_backup( +@@ -656,6 +785,7 @@ UuidInfo coroutine_fn *qmp_backup( const char *devlist, bool has_speed, int64_t speed, bool has_max_workers, int64_t max_workers, @@ -277,7 +279,7 @@ index 5ebb6a3947..a747d12d3d 100644 Error **errp) { assert(qemu_in_coroutine()); -@@ -684,7 +812,7 @@ UuidInfo coroutine_fn *qmp_backup( +@@ -684,7 +814,7 @@ UuidInfo coroutine_fn *qmp_backup( format = has_format ? format : BACKUP_FORMAT_VMA; bdrv_graph_co_rdlock(); @@ -286,7 +288,7 @@ index 5ebb6a3947..a747d12d3d 100644 bdrv_graph_co_rdunlock(); if (local_err) { error_propagate(errp, local_err); -@@ -1089,5 +1217,6 @@ ProxmoxSupportStatus *qmp_query_proxmox_support(Error **errp) +@@ -1089,5 +1219,6 @@ ProxmoxSupportStatus *qmp_query_proxmox_support(Error **errp) ret->query_bitmap_info = true; ret->pbs_masterkey = true; ret->backup_max_workers = true; diff --git a/debian/patches/pve/0051-PVE-backup-improve-error-when-copy-before-write-fail.patch b/debian/patches/pve/0051-PVE-backup-improve-error-when-copy-before-write-fail.patch index 4522d37..7fc2b3c 100644 --- a/debian/patches/pve/0051-PVE-backup-improve-error-when-copy-before-write-fail.patch +++ b/debian/patches/pve/0051-PVE-backup-improve-error-when-copy-before-write-fail.patch @@ -96,7 +96,7 @@ index dc6cafe7fa..a27d2d7d9f 100644 #endif /* COPY_BEFORE_WRITE_H */ diff --git a/pve-backup.c b/pve-backup.c -index a747d12d3d..4e730aa3da 100644 +index 5ea9e1f82f..aa6ddf4c52 100644 --- a/pve-backup.c +++ b/pve-backup.c @@ -374,6 +374,15 @@ static void pvebackup_complete_cb(void *opaque, int ret) -- 2.39.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel