Blame SOURCES/kvm-block-mirror-honor-ratelimit-again.patch

383d26
From 294916c8fdc6fdd221543c70b716e31591315379 Mon Sep 17 00:00:00 2001
383d26
From: Max Reitz <mreitz@redhat.com>
383d26
Date: Mon, 18 Jun 2018 14:47:34 +0200
383d26
Subject: [PATCH 24/54] block/mirror: honor ratelimit again
383d26
383d26
RH-Author: Max Reitz <mreitz@redhat.com>
383d26
Message-id: <20180618144736.29873-2-mreitz@redhat.com>
383d26
Patchwork-id: 80747
383d26
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH 1/3] block/mirror: honor ratelimit again
383d26
Bugzilla: 1572856
383d26
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
383d26
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
383d26
RH-Acked-by: John Snow <jsnow@redhat.com>
383d26
383d26
From: Stefan Hajnoczi <stefanha@redhat.com>
383d26
383d26
Commit b76e4458b1eb3c32e9824fe6aa51f67d2b251748 ("block/mirror: change
383d26
the semantic of 'force' of block-job-cancel") accidentally removed the
383d26
ratelimit in the mirror job.
383d26
383d26
Reintroduce the ratelimit but keep the block-job-cancel force=true
383d26
behavior that was added in commit
383d26
b76e4458b1eb3c32e9824fe6aa51f67d2b251748.
383d26
383d26
Note that block_job_sleep_ns() returns immediately when the job is
383d26
cancelled.  Therefore it's safe to unconditionally call
383d26
block_job_sleep_ns() - a cancelled job does not sleep.
383d26
383d26
This commit fixes the non-deterministic qemu-iotests 185 output.  The
383d26
test relies on the ratelimit to make the job sleep until the 'quit'
383d26
command is processed.  Previously the job could complete before the
383d26
'quit' command was received since there was no ratelimit.
383d26
383d26
Cc: Liang Li <liliang.opensource@gmail.com>
383d26
Cc: Jeff Cody <jcody@redhat.com>
383d26
Cc: Kevin Wolf <kwolf@redhat.com>
383d26
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
383d26
Message-id: 20180424123527.19168-1-stefanha@redhat.com
383d26
Signed-off-by: Jeff Cody <jcody@redhat.com>
383d26
(cherry picked from commit ddc4115efdfa6619689fe18871aa2d37890b3463)
383d26
Signed-off-by: Max Reitz <mreitz@redhat.com>
383d26
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
383d26
---
383d26
 block/mirror.c             | 8 +++++---
383d26
 tests/qemu-iotests/185.out | 2 +-
383d26
 2 files changed, 6 insertions(+), 4 deletions(-)
383d26
383d26
diff --git a/block/mirror.c b/block/mirror.c
383d26
index 820f512..9436a8d 100644
383d26
--- a/block/mirror.c
383d26
+++ b/block/mirror.c
383d26
@@ -868,12 +868,14 @@ static void coroutine_fn mirror_run(void *opaque)
383d26
         }
383d26
 
383d26
         ret = 0;
383d26
+
383d26
+        if (s->synced && !should_complete) {
383d26
+            delay_ns = (s->in_flight == 0 && cnt == 0 ? SLICE_TIME : 0);
383d26
+        }
383d26
         trace_mirror_before_sleep(s, cnt, s->synced, delay_ns);
383d26
+        block_job_sleep_ns(&s->common, delay_ns);
383d26
         if (block_job_is_cancelled(&s->common) && s->common.force) {
383d26
             break;
383d26
-        } else if (!should_complete) {
383d26
-            delay_ns = (s->in_flight == 0 && cnt == 0 ? SLICE_TIME : 0);
383d26
-            block_job_sleep_ns(&s->common, delay_ns);
383d26
         }
383d26
         s->last_pause_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
383d26
     }
383d26
diff --git a/tests/qemu-iotests/185.out b/tests/qemu-iotests/185.out
383d26
index 2c4b04d..992162f 100644
383d26
--- a/tests/qemu-iotests/185.out
383d26
+++ b/tests/qemu-iotests/185.out
383d26
@@ -36,9 +36,9 @@ Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 backing_file=TEST_DIR/t.q
383d26
 {"return": {}}
383d26
 Formatting 'TEST_DIR/t.qcow2.copy', fmt=qcow2 size=67108864 cluster_size=65536 lazy_refcounts=off refcount_bits=16
383d26
 {"return": {}}
383d26
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "disk", "len": 4194304, "offset": 4194304, "speed": 65536, "type": "mirror"}}
383d26
 {"return": {}}
383d26
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
383d26
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "disk", "len": 4194304, "offset": 4194304, "speed": 65536, "type": "mirror"}}
383d26
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "disk", "len": 4194304, "offset": 4194304, "speed": 65536, "type": "mirror"}}
383d26
 
383d26
 === Start backup job and exit qemu ===
383d26
-- 
383d26
1.8.3.1
383d26