Blame SOURCES/kvm-block-mirror-Make-cancel-always-cancel-pre-READY.patch

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