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