aboutsummaryrefslogtreecommitdiff
path: root/block/mirror.c
diff options
context:
space:
mode:
authorHanna Reitz <hreitz@redhat.com>2021-10-06 17:19:29 +0200
committerVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>2021-10-07 10:40:48 +0200
commita3810da5cff152a2a1b2d25a8b8080f640e491b6 (patch)
tree8c357bb3ba58ede035547f037b544da6e8059b6b /block/mirror.c
parentd431131439f228626aedc6d211c73b2a3616d5e1 (diff)
downloadqemu-a3810da5cff152a2a1b2d25a8b8080f640e491b6.zip
qemu-a3810da5cff152a2a1b2d25a8b8080f640e491b6.tar.gz
qemu-a3810da5cff152a2a1b2d25a8b8080f640e491b6.tar.bz2
mirror: Keep s->synced on error
An error does not take us out of the READY phase, which is what s->synced signifies. It does of course mean that source and target are no longer in sync, but that is what s->actively_sync is for -- s->synced never meant that source and target are in sync, only that they were at some point (and at that point we transitioned into the READY phase). The tangible problem is that we transition to READY once we are in sync and s->synced is false. By resetting s->synced here, we will transition from READY to READY once the error is resolved (if the job keeps running), and that transition is not allowed. Signed-off-by: Hanna Reitz <hreitz@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20211006151940.214590-3-hreitz@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Diffstat (limited to 'block/mirror.c')
-rw-r--r--block/mirror.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/block/mirror.c b/block/mirror.c
index c962e8b..b367b29 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -121,7 +121,6 @@ typedef enum MirrorMethod {
static BlockErrorAction mirror_error_action(MirrorBlockJob *s, bool read,
int error)
{
- s->synced = false;
s->actively_synced = false;
if (read) {
return block_job_error_action(&s->common, s->on_source_error,