diff options
-rw-r--r-- | block/mirror.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/block/mirror.c b/block/mirror.c index 9bfc22f571..2d9104efc0 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -95,7 +95,14 @@ static void mirror_iteration_done(MirrorOp *op, int ret) } g_slice_free(MirrorOp, op); - qemu_coroutine_enter(s->common.co, NULL); + + /* Enter coroutine when it is not sleeping. The coroutine sleeps to + * rate-limit itself. The coroutine will eventually resume since there is + * a sleep timeout so don't wake it early. + */ + if (s->common.busy) { + qemu_coroutine_enter(s->common.co, NULL); + } } static void mirror_write_complete(void *opaque, int ret) |