|
|
4a2fec |
From 20f05f7cc0ae81aecad40e5c3c69d9c91d6d3687 Mon Sep 17 00:00:00 2001
|
|
|
4a2fec |
From: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
4a2fec |
Date: Fri, 17 Nov 2017 11:19:05 +0100
|
|
|
4a2fec |
Subject: [PATCH 06/15] block: Check for inserted BlockDriverState in
|
|
|
4a2fec |
blk_io_limits_disable()
|
|
|
4a2fec |
|
|
|
4a2fec |
RH-Author: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
4a2fec |
Message-id: <20171117111908.8815-7-stefanha@redhat.com>
|
|
|
4a2fec |
Patchwork-id: 77741
|
|
|
4a2fec |
O-Subject: [RHV7.5 qemu-kvm-rhev PATCH 6/9] block: Check for inserted BlockDriverState in blk_io_limits_disable()
|
|
|
4a2fec |
Bugzilla: 1492295
|
|
|
4a2fec |
RH-Acked-by: John Snow <jsnow@redhat.com>
|
|
|
4a2fec |
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
|
|
|
4a2fec |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
4a2fec |
|
|
|
4a2fec |
From: Alberto Garcia <berto@igalia.com>
|
|
|
4a2fec |
|
|
|
4a2fec |
When you set I/O limits using block_set_io_throttle or the command
|
|
|
4a2fec |
line throttling.* options they are kept in the BlockBackend regardless
|
|
|
4a2fec |
of whether a BlockDriverState is attached to the backend or not.
|
|
|
4a2fec |
|
|
|
4a2fec |
Therefore when removing the limits using blk_io_limits_disable() we
|
|
|
4a2fec |
need to check if there's a BDS before attempting to drain it, else it
|
|
|
4a2fec |
will crash QEMU. This can be reproduced very easily using HMP:
|
|
|
4a2fec |
|
|
|
4a2fec |
(qemu) drive_add 0 if=none,throttling.iops-total=5000
|
|
|
4a2fec |
(qemu) drive_del none0
|
|
|
4a2fec |
|
|
|
4a2fec |
Reported-by: sochin jiang <sochin.jiang@huawei.com>
|
|
|
4a2fec |
Signed-off-by: Alberto Garcia <berto@igalia.com>
|
|
|
4a2fec |
Reviewed-by: Max Reitz <mreitz@redhat.com>
|
|
|
4a2fec |
Message-id: 0d3a67ce8d948bb33e08672564714dcfb76a3d8c.1510339534.git.berto@igalia.com
|
|
|
4a2fec |
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
4a2fec |
(cherry picked from commit 48bf7ea81aa848027bad24f7e7791b503dff727d)
|
|
|
4a2fec |
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
4a2fec |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
4a2fec |
---
|
|
|
4a2fec |
block/block-backend.c | 14 ++++++++++----
|
|
|
4a2fec |
1 file changed, 10 insertions(+), 4 deletions(-)
|
|
|
4a2fec |
|
|
|
4a2fec |
diff --git a/block/block-backend.c b/block/block-backend.c
|
|
|
4a2fec |
index 520f2b2..0bd439e 100644
|
|
|
4a2fec |
--- a/block/block-backend.c
|
|
|
4a2fec |
+++ b/block/block-backend.c
|
|
|
4a2fec |
@@ -1999,10 +1999,16 @@ void blk_set_io_limits(BlockBackend *blk, ThrottleConfig *cfg)
|
|
|
4a2fec |
|
|
|
4a2fec |
void blk_io_limits_disable(BlockBackend *blk)
|
|
|
4a2fec |
{
|
|
|
4a2fec |
- assert(blk->public.throttle_group_member.throttle_state);
|
|
|
4a2fec |
- bdrv_drained_begin(blk_bs(blk));
|
|
|
4a2fec |
- throttle_group_unregister_tgm(&blk->public.throttle_group_member);
|
|
|
4a2fec |
- bdrv_drained_end(blk_bs(blk));
|
|
|
4a2fec |
+ BlockDriverState *bs = blk_bs(blk);
|
|
|
4a2fec |
+ ThrottleGroupMember *tgm = &blk->public.throttle_group_member;
|
|
|
4a2fec |
+ assert(tgm->throttle_state);
|
|
|
4a2fec |
+ if (bs) {
|
|
|
4a2fec |
+ bdrv_drained_begin(bs);
|
|
|
4a2fec |
+ }
|
|
|
4a2fec |
+ throttle_group_unregister_tgm(tgm);
|
|
|
4a2fec |
+ if (bs) {
|
|
|
4a2fec |
+ bdrv_drained_end(bs);
|
|
|
4a2fec |
+ }
|
|
|
4a2fec |
}
|
|
|
4a2fec |
|
|
|
4a2fec |
/* should be called before blk_set_io_limits if a limit is set */
|
|
|
4a2fec |
--
|
|
|
4a2fec |
1.8.3.1
|
|
|
4a2fec |
|