mirror of
https://git.proxmox.com/git/pve-qemu
synced 2025-10-17 20:53:57 +00:00

Fix the two issues reported in the community forum[0][1], i.e. regression in LSI-53c895a controller and ignored boot order for USB storage (only possible via custom arguments in Proxmox VE), both causing boot failures, and pick up fixes for VirtIO, ARM emulation, char IO device and a graph lock fix for the block layer. The block-copy patches that serve as a preparation for fleecing are moved to the extra folder, because the graph lock fix requires them to be present first. They have been applied upstream in the meantime and should drop out with the rebase on 9.1. [0]: https://forum.proxmox.com/threads/149772/post-679433 [1]: https://forum.proxmox.com/threads/149772/post-683459 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
107 lines
4.3 KiB
Diff
107 lines
4.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Fiona Ebner <f.ebner@proxmox.com>
|
|
Date: Thu, 11 Apr 2024 11:29:27 +0200
|
|
Subject: [PATCH] backup: add minimum cluster size to performance options
|
|
|
|
Useful to make discard-source work in the context of backup fleecing
|
|
when the fleecing image has a larger granularity than the backup
|
|
target.
|
|
|
|
Backup/block-copy will use at least this granularity for copy operations
|
|
and in particular, discard requests to the backup source will too. If
|
|
the granularity is too small, they will just be aligned down in
|
|
cbw_co_pdiscard_snapshot() and thus effectively ignored.
|
|
|
|
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
|
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
---
|
|
block/backup.c | 2 +-
|
|
block/copy-before-write.c | 2 ++
|
|
block/copy-before-write.h | 1 +
|
|
blockdev.c | 3 +++
|
|
qapi/block-core.json | 9 +++++++--
|
|
5 files changed, 14 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/block/backup.c b/block/backup.c
|
|
index 1963e47ab9..fe69723ada 100644
|
|
--- a/block/backup.c
|
|
+++ b/block/backup.c
|
|
@@ -434,7 +434,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
|
|
}
|
|
|
|
cbw = bdrv_cbw_append(bs, target, filter_node_name, discard_source,
|
|
- &bcs, errp);
|
|
+ perf->min_cluster_size, &bcs, errp);
|
|
if (!cbw) {
|
|
goto error;
|
|
}
|
|
diff --git a/block/copy-before-write.c b/block/copy-before-write.c
|
|
index 47b3cdd09f..bba58326d7 100644
|
|
--- a/block/copy-before-write.c
|
|
+++ b/block/copy-before-write.c
|
|
@@ -546,6 +546,7 @@ BlockDriverState *bdrv_cbw_append(BlockDriverState *source,
|
|
BlockDriverState *target,
|
|
const char *filter_node_name,
|
|
bool discard_source,
|
|
+ int64_t min_cluster_size,
|
|
BlockCopyState **bcs,
|
|
Error **errp)
|
|
{
|
|
@@ -564,6 +565,7 @@ BlockDriverState *bdrv_cbw_append(BlockDriverState *source,
|
|
}
|
|
qdict_put_str(opts, "file", bdrv_get_node_name(source));
|
|
qdict_put_str(opts, "target", bdrv_get_node_name(target));
|
|
+ qdict_put_int(opts, "min-cluster-size", min_cluster_size);
|
|
|
|
top = bdrv_insert_node(source, opts, flags, errp);
|
|
if (!top) {
|
|
diff --git a/block/copy-before-write.h b/block/copy-before-write.h
|
|
index 01af0cd3c4..dc6cafe7fa 100644
|
|
--- a/block/copy-before-write.h
|
|
+++ b/block/copy-before-write.h
|
|
@@ -40,6 +40,7 @@ BlockDriverState *bdrv_cbw_append(BlockDriverState *source,
|
|
BlockDriverState *target,
|
|
const char *filter_node_name,
|
|
bool discard_source,
|
|
+ int64_t min_cluster_size,
|
|
BlockCopyState **bcs,
|
|
Error **errp);
|
|
void bdrv_cbw_drop(BlockDriverState *bs);
|
|
diff --git a/blockdev.c b/blockdev.c
|
|
index 1054a69279..cbe224387b 100644
|
|
--- a/blockdev.c
|
|
+++ b/blockdev.c
|
|
@@ -2654,6 +2654,9 @@ static BlockJob *do_backup_common(BackupCommon *backup,
|
|
if (backup->x_perf->has_max_chunk) {
|
|
perf.max_chunk = backup->x_perf->max_chunk;
|
|
}
|
|
+ if (backup->x_perf->has_min_cluster_size) {
|
|
+ perf.min_cluster_size = backup->x_perf->min_cluster_size;
|
|
+ }
|
|
}
|
|
|
|
if ((backup->sync == MIRROR_SYNC_MODE_BITMAP) ||
|
|
diff --git a/qapi/block-core.json b/qapi/block-core.json
|
|
index 9caf04cbe9..df934647ed 100644
|
|
--- a/qapi/block-core.json
|
|
+++ b/qapi/block-core.json
|
|
@@ -1790,11 +1790,16 @@
|
|
# it should not be less than job cluster size which is calculated
|
|
# as maximum of target image cluster size and 64k. Default 0.
|
|
#
|
|
+# @min-cluster-size: Minimum size of blocks used by copy-before-write
|
|
+# and background copy operations. Has to be a power of 2. No
|
|
+# effect if smaller than the maximum of the target's cluster size
|
|
+# and 64 KiB. Default 0. (Since 8.1)
|
|
+#
|
|
# Since: 6.0
|
|
##
|
|
{ 'struct': 'BackupPerf',
|
|
- 'data': { '*use-copy-range': 'bool',
|
|
- '*max-workers': 'int', '*max-chunk': 'int64' } }
|
|
+ 'data': { '*use-copy-range': 'bool', '*max-workers': 'int',
|
|
+ '*max-chunk': 'int64', '*min-cluster-size': 'uint32' } }
|
|
|
|
##
|
|
# @BackupCommon:
|