Message ID | 20180813022006.7216-12-mreitz@redhat.com |
---|---|
State | New |
Headers | show |
Series | mirror: Mainly coroutine refinements | expand |
diff --git a/block/mirror.c b/block/mirror.c index 2a131d8b99..66746cf075 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -407,7 +407,17 @@ static void coroutine_fn mirror_co_perform(void *opaque) abort(); } - mirror_write_complete(op, ret); + if (ret < 0) { + BlockErrorAction action; + + bdrv_set_dirty_bitmap(s->dirty_bitmap, op->offset, op->bytes); + action = mirror_error_action(s, false, -ret); + if (action == BLOCK_ERROR_ACTION_REPORT && s->ret >= 0) { + s->ret = ret; + } + } + + mirror_iteration_done(op, ret); done: aio_context_release(aio_context);
Eventually, we want to inline mirror_write_complete() fully into mirror_co_perform(). This patch does the inlining, but we cannot remove the function yet, as it is still required by mirror_co_read(). Signed-off-by: Max Reitz <mreitz@redhat.com> --- block/mirror.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)