[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 03/10] block/mirror: move dirty bitmap to filter
From: |
Fiona Ebner |
Subject: |
[PATCH v2 03/10] block/mirror: move dirty bitmap to filter |
Date: |
Mon, 9 Oct 2023 11:46:12 +0200 |
In preparation to allow switching to active mode without draining.
Initialization of the bitmap in mirror_dirty_init() still happens with
the original/backing BlockDriverState, which should be fine, because
the mirror top has the same length.
Suggested-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
New in v2.
block/mirror.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/block/mirror.c b/block/mirror.c
index b764ad5108..0ed54754e2 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -1500,6 +1500,10 @@ bdrv_mirror_top_do_write(BlockDriverState *bs,
MirrorMethod method,
abort();
}
+ if (!copy_to_target && s->job && s->job->dirty_bitmap) {
+ bdrv_set_dirty_bitmap(s->job->dirty_bitmap, offset, bytes);
+ }
+
if (ret < 0) {
goto out;
}
@@ -1823,13 +1827,17 @@ static BlockJob *mirror_start_job(
s->should_complete = true;
}
- s->dirty_bitmap = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp);
+ s->dirty_bitmap = bdrv_create_dirty_bitmap(s->mirror_top_bs, granularity,
+ NULL, errp);
if (!s->dirty_bitmap) {
goto fail;
}
- if (s->copy_mode == MIRROR_COPY_MODE_WRITE_BLOCKING) {
- bdrv_disable_dirty_bitmap(s->dirty_bitmap);
- }
+
+ /*
+ * The dirty bitmap is set by bdrv_mirror_top_do_write() when not in active
+ * mode.
+ */
+ bdrv_disable_dirty_bitmap(s->dirty_bitmap);
ret = block_job_add_bdrv(&s->common, "source", bs, 0,
BLK_PERM_WRITE_UNCHANGED | BLK_PERM_WRITE |
--
2.39.2
- [PATCH v2 00/10] mirror: allow switching from background to active mode, Fiona Ebner, 2023/10/09
- [PATCH v2 02/10] block/mirror: set actively_synced even after the job is ready, Fiona Ebner, 2023/10/09
- [PATCH v2 01/10] blockjob: introduce block-job-change QMP command, Fiona Ebner, 2023/10/09
- [PATCH v2 04/10] block/mirror: determine copy_to_target only once, Fiona Ebner, 2023/10/09
- [PATCH v2 03/10] block/mirror: move dirty bitmap to filter,
Fiona Ebner <=
- [PATCH v2 08/10] blockjob: query driver-specific info via a new 'query' driver method, Fiona Ebner, 2023/10/09
- [PATCH v2 05/10] mirror: implement mirror_change method, Fiona Ebner, 2023/10/09
- [PATCH v2 09/10] mirror: return mirror-specific information upon query, Fiona Ebner, 2023/10/09
- [PATCH v2 07/10] qapi/block-core: turn BlockJobInfo into a union, Fiona Ebner, 2023/10/09