]> git.proxmox.com Git - pve-qemu.git/blob - debian/patches/pve/0026-block-backup-move-bcs-bitmap-initialization-to-job-c.patch
update submodule and patches to 7.2.0
[pve-qemu.git] / debian / patches / pve / 0026-block-backup-move-bcs-bitmap-initialization-to-job-c.patch
1 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2 From: Fabian Ebner <f.ebner@proxmox.com>
3 Date: Wed, 2 Mar 2022 08:35:05 +0100
4 Subject: [PATCH] block/backup: move bcs bitmap initialization to job creation
5
6 For backing up the state of multiple disks from the same time, a job
7 for each disk has to be created. It's convenient if the jobs don't
8 have to be started at the same time and if operation of the VM can be
9 resumed after job creation. This would lead to a window between job
10 creation and running the job, where writes can happen. But no writes
11 should happen between setting up the copy-before-write filter and
12 setting up the block copy state bitmap, because then new writes would
13 just pass through.
14
15 Commit 06e0a9c16405c0a4c1eca33cf286cc04c42066a2 moved initalization of
16 the bitmap to setting up the copy-before-write filter when sync_mode
17 is not MIRROR_SYNC_MODE_BITMAP. Ensure that the bitmap is initialized
18 upon job creation for the remaining case too, by moving the
19 backup_init_bcs_bitmap call to backup_job_create.
20
21 Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
22 Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
23 ---
24 block/backup.c | 8 ++++----
25 1 file changed, 4 insertions(+), 4 deletions(-)
26
27 diff --git a/block/backup.c b/block/backup.c
28 index 6a9ad97a53..9b0151c5be 100644
29 --- a/block/backup.c
30 +++ b/block/backup.c
31 @@ -237,8 +237,8 @@ static void backup_init_bcs_bitmap(BackupBlockJob *job)
32 true);
33 } else if (job->sync_mode == MIRROR_SYNC_MODE_TOP) {
34 /*
35 - * We can't hog the coroutine to initialize this thoroughly.
36 - * Set a flag and resume work when we are able to yield safely.
37 + * Initialization is costly here. Simply set a flag and let the
38 + * backup_run coroutine resume work once it can yield safely.
39 */
40 block_copy_set_skip_unallocated(job->bcs, true);
41 }
42 @@ -252,8 +252,6 @@ static int coroutine_fn backup_run(Job *job, Error **errp)
43 BackupBlockJob *s = container_of(job, BackupBlockJob, common.job);
44 int ret;
45
46 - backup_init_bcs_bitmap(s);
47 -
48 if (s->sync_mode == MIRROR_SYNC_MODE_TOP) {
49 int64_t offset = 0;
50 int64_t count;
51 @@ -492,6 +490,8 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
52 block_job_add_bdrv(&job->common, "target", target, 0, BLK_PERM_ALL,
53 &error_abort);
54
55 + backup_init_bcs_bitmap(job);
56 +
57 return &job->common;
58
59 error: