ed795e95d8
- kvm-block-Lock-AioContext-for-drain_end-in-blockdev-reop.patch [bz#2046659] - kvm-iotests-Test-blockdev-reopen-with-iothreads-and-thro.patch [bz#2046659] - kvm-block-nbd-Delete-reconnect-delay-timer-when-done.patch [bz#2033626] - kvm-block-nbd-Assert-there-are-no-timers-when-closed.patch [bz#2033626] - kvm-iotests.py-Add-QemuStorageDaemon-class.patch [bz#2033626] - kvm-iotests-281-Test-lingering-timers.patch [bz#2033626] - kvm-block-nbd-Move-s-ioc-on-AioContext-change.patch [bz#2033626] - kvm-iotests-281-Let-NBD-connection-yield-in-iothread.patch [bz#2033626] - Resolves: bz#2046659 (qemu crash after execute blockdev-reopen with iothread) - Resolves: bz#2033626 (Qemu core dump when start guest with nbd node or do block jobs to nbd node)
107 lines
4.0 KiB
Diff
107 lines
4.0 KiB
Diff
From 37593348e7d95580fb2b0009dcb026c07367f1f8 Mon Sep 17 00:00:00 2001
|
|
From: Kevin Wolf <kwolf@redhat.com>
|
|
Date: Thu, 3 Feb 2022 15:05:34 +0100
|
|
Subject: [PATCH 2/8] iotests: Test blockdev-reopen with iothreads and
|
|
throttling
|
|
|
|
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
|
RH-MergeRequest: 73: block: Lock AioContext for drain_end in blockdev-reopen
|
|
RH-Commit: [2/2] d19d5fa9efa4813ece75708436891041754ab910 (kmwolf/centos-qemu-kvm)
|
|
RH-Bugzilla: 2046659
|
|
RH-Acked-by: Sergio Lopez <None>
|
|
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
RH-Acked-by: Hanna Reitz <hreitz@redhat.com>
|
|
|
|
The 'throttle' block driver implements .bdrv_co_drain_end, so
|
|
blockdev-reopen will have to wait for it to complete in the polling
|
|
loop at the end of qmp_blockdev_reopen(). This makes AIO_WAIT_WHILE()
|
|
release the AioContext lock, which causes a crash if the lock hasn't
|
|
correctly been taken.
|
|
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
Message-Id: <20220203140534.36522-3-kwolf@redhat.com>
|
|
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
(cherry picked from commit ee810602376125ca0e0afd6b7c715e13740978ea)
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
---
|
|
tests/qemu-iotests/245 | 36 +++++++++++++++++++++++++++++++++---
|
|
tests/qemu-iotests/245.out | 4 ++--
|
|
2 files changed, 35 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/tests/qemu-iotests/245 b/tests/qemu-iotests/245
|
|
index 24ac43f70e..8cbed7821b 100755
|
|
--- a/tests/qemu-iotests/245
|
|
+++ b/tests/qemu-iotests/245
|
|
@@ -1138,12 +1138,13 @@ class TestBlockdevReopen(iotests.QMPTestCase):
|
|
self.assertEqual(self.get_node('hd1'), None)
|
|
self.assert_qmp(self.get_node('hd2'), 'ro', True)
|
|
|
|
- def run_test_iothreads(self, iothread_a, iothread_b, errmsg = None):
|
|
- opts = hd_opts(0)
|
|
+ def run_test_iothreads(self, iothread_a, iothread_b, errmsg = None,
|
|
+ opts_a = None, opts_b = None):
|
|
+ opts = opts_a or hd_opts(0)
|
|
result = self.vm.qmp('blockdev-add', conv_keys = False, **opts)
|
|
self.assert_qmp(result, 'return', {})
|
|
|
|
- opts2 = hd_opts(2)
|
|
+ opts2 = opts_b or hd_opts(2)
|
|
result = self.vm.qmp('blockdev-add', conv_keys = False, **opts2)
|
|
self.assert_qmp(result, 'return', {})
|
|
|
|
@@ -1194,6 +1195,35 @@ class TestBlockdevReopen(iotests.QMPTestCase):
|
|
def test_iothreads_switch_overlay(self):
|
|
self.run_test_iothreads('', 'iothread0')
|
|
|
|
+ def test_iothreads_with_throttling(self):
|
|
+ # Create a throttle-group object
|
|
+ opts = { 'qom-type': 'throttle-group', 'id': 'group0',
|
|
+ 'limits': { 'iops-total': 1000 } }
|
|
+ result = self.vm.qmp('object-add', conv_keys = False, **opts)
|
|
+ self.assert_qmp(result, 'return', {})
|
|
+
|
|
+ # Options with a throttle filter between format and protocol
|
|
+ opts = [
|
|
+ {
|
|
+ 'driver': iotests.imgfmt,
|
|
+ 'node-name': f'hd{idx}',
|
|
+ 'file' : {
|
|
+ 'node-name': f'hd{idx}-throttle',
|
|
+ 'driver': 'throttle',
|
|
+ 'throttle-group': 'group0',
|
|
+ 'file': {
|
|
+ 'driver': 'file',
|
|
+ 'node-name': f'hd{idx}-file',
|
|
+ 'filename': hd_path[idx],
|
|
+ },
|
|
+ },
|
|
+ }
|
|
+ for idx in (0, 2)
|
|
+ ]
|
|
+
|
|
+ self.run_test_iothreads('iothread0', 'iothread0', None,
|
|
+ opts[0], opts[1])
|
|
+
|
|
if __name__ == '__main__':
|
|
iotests.activate_logging()
|
|
iotests.main(supported_fmts=["qcow2"],
|
|
diff --git a/tests/qemu-iotests/245.out b/tests/qemu-iotests/245.out
|
|
index 4eced19294..a4e04a3266 100644
|
|
--- a/tests/qemu-iotests/245.out
|
|
+++ b/tests/qemu-iotests/245.out
|
|
@@ -17,8 +17,8 @@ read 1/1 bytes at offset 262152
|
|
read 1/1 bytes at offset 262160
|
|
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
-...............
|
|
+................
|
|
----------------------------------------------------------------------
|
|
-Ran 25 tests
|
|
+Ran 26 tests
|
|
|
|
OK
|
|
--
|
|
2.27.0
|
|
|