[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 18/20] mirror: add support for persistent dirty bitm
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 18/20] mirror: add support for persistent dirty bitmap |
Date: |
Wed, 12 Dec 2012 14:46:37 +0100 |
A persistent dirty bitmap lets mirroring proceed with no waste of work
after QEMU exits (either offline, or online when the VM restarts).
It is also useful in order to communicate to management whether the
switch to the destination was completed or not.
Signed-off-by: Paolo Bonzini <address@hidden>
---
block/mirror.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/block/mirror.c b/block/mirror.c
index 99c5bd1..3d37396 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -351,6 +351,18 @@ static void coroutine_fn mirror_run(void *opaque)
}
}
+ /*
+ * Ensure the set bits have reached the persistent dirty bitmap before
+ * moving on. This covers the case where no I/O happens between the
+ * beginning of mirroring and block-job-complete, but there were indeed
+ * some dirty sectors. In this case, the persistent dirty bitmap could end
+ * up staying all-zeroes all the time!
+ */
+ ret = bdrv_flush_dirty_tracking(bs, true);
+ if (ret < 0) {
+ goto immediate_exit;
+ }
+
bdrv_dirty_iter_init(bs, &s->hbi);
last_pause_ns = qemu_get_clock_ns(rt_clock);
for (;;) {
@@ -392,6 +404,9 @@ static void coroutine_fn mirror_run(void *opaque)
break;
}
} else {
+ ret = bdrv_flush_dirty_tracking(bs, false);
+ assert(ret >= 0);
+
/* We're out of the streaming phase. From now on, if the job
* is cancelled we will actually complete all pending I/O and
* report completion. This way, block-job-cancel will leave
--
1.8.0.1
- [Qemu-devel] [PATCH 13/20] oslib: add a wrapper for mmap/munmap, (continued)
- [Qemu-devel] [PATCH 13/20] oslib: add a wrapper for mmap/munmap, Paolo Bonzini, 2012/12/12
- [Qemu-devel] [PATCH 14/20] hbitmap: add hbitmap_alloc_with_data and hbitmap_required_size, Paolo Bonzini, 2012/12/12
- [Qemu-devel] [PATCH 15/20] hbitmap: add hbitmap_copy, Paolo Bonzini, 2012/12/12
- [Qemu-devel] [PATCH 16/20] block: split bdrv_enable_dirty_tracking and bdrv_disable_dirty_tracking, Paolo Bonzini, 2012/12/12
- [Qemu-devel] [PATCH 18/20] mirror: add support for persistent dirty bitmap,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 19/20] block: choose the default dirty bitmap granularity in bdrv_enable_dirty_tracking, Paolo Bonzini, 2012/12/12
- [Qemu-devel] [PATCH 01/20] host-utils: add ffsl, Paolo Bonzini, 2012/12/12
- [Qemu-devel] [PATCH 17/20] block: support a persistent dirty bitmap, Paolo Bonzini, 2012/12/12
- [Qemu-devel] [PATCH 20/20] monitor: add commands to start/stop dirty bitmap, Paolo Bonzini, 2012/12/12