26ba25
From a31ab535355600b06654345542f388d855c4569c Mon Sep 17 00:00:00 2001
26ba25
From: Max Reitz <mreitz@redhat.com>
26ba25
Date: Mon, 18 Jun 2018 14:47:35 +0200
26ba25
Subject: [PATCH 034/268] block/mirror: Make cancel always cancel pre-READY
26ba25
26ba25
RH-Author: Max Reitz <mreitz@redhat.com>
26ba25
Message-id: <20180618144736.29873-3-mreitz@redhat.com>
26ba25
Patchwork-id: 80748
26ba25
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH 2/3] block/mirror: Make cancel always cancel pre-READY
26ba25
Bugzilla: 1572856
26ba25
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
26ba25
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
26ba25
RH-Acked-by: John Snow <jsnow@redhat.com>
26ba25
26ba25
Commit b76e4458b1eb3c32e9824fe6aa51f67d2b251748 made the mirror block
26ba25
job respect block-job-cancel's @force flag: With that flag set, it would
26ba25
now always really cancel, even post-READY.
26ba25
26ba25
Unfortunately, it had a side effect: Without that flag set, it would now
26ba25
never cancel, not even before READY.  Considering that is an
26ba25
incompatible change and not noted anywhere in the commit or the
26ba25
description of block-job-cancel's @force parameter, this seems
26ba25
unintentional and we should revert to the previous behavior, which is to
26ba25
immediately cancel the job when block-job-cancel is called before source
26ba25
and target are in sync (i.e. before the READY event).
26ba25
26ba25
Cc: qemu-stable@nongnu.org
26ba25
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1572856
26ba25
Reported-by: Yanan Fu <yfu@redhat.com>
26ba25
Signed-off-by: Max Reitz <mreitz@redhat.com>
26ba25
Reviewed-by: Eric Blake <eblake@redhat.com>
26ba25
Message-id: 20180501220509.14152-2-mreitz@redhat.com
26ba25
Reviewed-by: Jeff Cody <jcody@redhat.com>
26ba25
Signed-off-by: Jeff Cody <jcody@redhat.com>
26ba25
(cherry picked from commit eb36639f7bbc16055e551593b81365e8ae3b0b05)
26ba25
Signed-off-by: Max Reitz <mreitz@redhat.com>
26ba25
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
26ba25
---
26ba25
 block/mirror.c | 4 +++-
26ba25
 1 file changed, 3 insertions(+), 1 deletion(-)
26ba25
26ba25
diff --git a/block/mirror.c b/block/mirror.c
26ba25
index 9436a8d..99da9c0 100644
26ba25
--- a/block/mirror.c
26ba25
+++ b/block/mirror.c
26ba25
@@ -874,7 +874,9 @@ static void coroutine_fn mirror_run(void *opaque)
26ba25
         }
26ba25
         trace_mirror_before_sleep(s, cnt, s->synced, delay_ns);
26ba25
         block_job_sleep_ns(&s->common, delay_ns);
26ba25
-        if (block_job_is_cancelled(&s->common) && s->common.force) {
26ba25
+        if (block_job_is_cancelled(&s->common) &&
26ba25
+            (!s->synced || s->common.force))
26ba25
+        {
26ba25
             break;
26ba25
         }
26ba25
         s->last_pause_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
26ba25
-- 
26ba25
1.8.3.1
26ba25