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