[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 3/9] block/mirror: move dirty bitmap to filter
From: |
Fiona Ebner |
Subject: |
[PATCH v3 3/9] block/mirror: move dirty bitmap to filter |
Date: |
Fri, 13 Oct 2023 11:21:37 +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>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
No changes in v3.
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 v3 0/9] mirror: allow switching from background to active mode, Fiona Ebner, 2023/10/13
- [PATCH v3 7/9] qapi/block-core: turn BlockJobInfo into a union, Fiona Ebner, 2023/10/13
- [PATCH v3 3/9] block/mirror: move dirty bitmap to filter,
Fiona Ebner <=
- [PATCH v3 8/9] blockjob: query driver-specific info via a new 'query' driver method, Fiona Ebner, 2023/10/13
- [PATCH v3 4/9] block/mirror: determine copy_to_target only once, Fiona Ebner, 2023/10/13
- [PATCH v3 6/9] qapi/block-core: use JobType for BlockJobInfo's type, Fiona Ebner, 2023/10/13
- [PATCH v3 5/9] mirror: implement mirror_change method, Fiona Ebner, 2023/10/13