[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 03/21] block: remove timer canceling in throttle_conf
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 03/21] block: remove timer canceling in throttle_config() |
Date: |
Tue, 18 Jul 2017 16:17:48 +0200 |
From: Manos Pitsidianakis <address@hidden>
throttle_config() cancels the timers of the calling BlockBackend. This
doesn't make sense because other BlockBackends in the group remain
untouched. There's no need to cancel the timers in the one specific
BlockBackend so let's not do that. Throttled requests will run as
scheduled and future requests will follow the new configuration. This
also allows a throttle group's configuration to be changed even when it
has no members.
Signed-off-by: Manos Pitsidianakis <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/throttle-groups.c | 10 +---------
fsdev/qemu-fsdev-throttle.c | 2 +-
include/qemu/throttle.h | 1 -
tests/test-throttle.c | 4 ++--
util/throttle.c | 14 --------------
5 files changed, 4 insertions(+), 27 deletions(-)
diff --git a/block/throttle-groups.c b/block/throttle-groups.c
index 71af3f7..890bfde 100644
--- a/block/throttle-groups.c
+++ b/block/throttle-groups.c
@@ -426,18 +426,10 @@ void throttle_group_restart_blk(BlockBackend *blk)
void throttle_group_config(BlockBackend *blk, ThrottleConfig *cfg)
{
BlockBackendPublic *blkp = blk_get_public(blk);
- ThrottleTimers *tt = &blkp->throttle_timers;
ThrottleState *ts = blkp->throttle_state;
ThrottleGroup *tg = container_of(ts, ThrottleGroup, ts);
qemu_mutex_lock(&tg->lock);
- /* throttle_config() cancels the timers */
- if (timer_pending(tt->timers[0])) {
- tg->any_timer_armed[0] = false;
- }
- if (timer_pending(tt->timers[1])) {
- tg->any_timer_armed[1] = false;
- }
- throttle_config(ts, tg->clock_type, tt, cfg);
+ throttle_config(ts, tg->clock_type, cfg);
qemu_mutex_unlock(&tg->lock);
throttle_group_restart_blk(blk);
diff --git a/fsdev/qemu-fsdev-throttle.c b/fsdev/qemu-fsdev-throttle.c
index 453fb1e..49eebb5 100644
--- a/fsdev/qemu-fsdev-throttle.c
+++ b/fsdev/qemu-fsdev-throttle.c
@@ -86,7 +86,7 @@ void fsdev_throttle_init(FsThrottle *fst)
fsdev_throttle_read_timer_cb,
fsdev_throttle_write_timer_cb,
fst);
- throttle_config(&fst->ts, QEMU_CLOCK_REALTIME, &fst->tt, &fst->cfg);
+ throttle_config(&fst->ts, QEMU_CLOCK_REALTIME, &fst->cfg);
qemu_co_queue_init(&fst->throttled_reqs[0]);
qemu_co_queue_init(&fst->throttled_reqs[1]);
}
diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h
index 8d2fd77..d056008 100644
--- a/include/qemu/throttle.h
+++ b/include/qemu/throttle.h
@@ -140,7 +140,6 @@ bool throttle_is_valid(ThrottleConfig *cfg, Error **errp);
void throttle_config(ThrottleState *ts,
QEMUClockType clock_type,
- ThrottleTimers *tt,
ThrottleConfig *cfg);
void throttle_get_config(ThrottleState *ts, ThrottleConfig *cfg);
diff --git a/tests/test-throttle.c b/tests/test-throttle.c
index 2d9cd46..768f11d 100644
--- a/tests/test-throttle.c
+++ b/tests/test-throttle.c
@@ -228,7 +228,7 @@ static void test_config_functions(void)
read_timer_cb, write_timer_cb, &ts);
/* structure reset by throttle_init previous_leak should be null */
g_assert(!ts.previous_leak);
- throttle_config(&ts, QEMU_CLOCK_VIRTUAL, &tt, &orig_cfg);
+ throttle_config(&ts, QEMU_CLOCK_VIRTUAL, &orig_cfg);
/* has previous leak been initialized by throttle_config ? */
g_assert(ts.previous_leak);
@@ -486,7 +486,7 @@ static bool do_test_accounting(bool is_ops, /* are we
testing bps or ops */
throttle_init(&ts);
throttle_timers_init(&tt, ctx, QEMU_CLOCK_VIRTUAL,
read_timer_cb, write_timer_cb, &ts);
- throttle_config(&ts, QEMU_CLOCK_VIRTUAL, &tt, &cfg);
+ throttle_config(&ts, QEMU_CLOCK_VIRTUAL, &cfg);
/* account a read */
throttle_account(&ts, false, size);
diff --git a/util/throttle.c b/util/throttle.c
index 3e94807..b2a52b8 100644
--- a/util/throttle.c
+++ b/util/throttle.c
@@ -388,24 +388,14 @@ static void throttle_unfix_bucket(LeakyBucket *bkt)
}
}
-/* take care of canceling a timer */
-static void throttle_cancel_timer(QEMUTimer *timer)
-{
- assert(timer != NULL);
-
- timer_del(timer);
-}
-
/* Used to configure the throttle
*
* @ts: the throttle state we are working on
* @clock_type: the group's clock_type
- * @tt: the throttle timers we use in this aio context
* @cfg: the config to set
*/
void throttle_config(ThrottleState *ts,
QEMUClockType clock_type,
- ThrottleTimers *tt,
ThrottleConfig *cfg)
{
int i;
@@ -417,10 +407,6 @@ void throttle_config(ThrottleState *ts,
}
ts->previous_leak = qemu_clock_get_ns(clock_type);
-
- for (i = 0; i < 2; i++) {
- throttle_cancel_timer(tt->timers[i]);
- }
}
/* used to get config
--
1.8.3.1
- [Qemu-devel] [PULL 00/21] Block layer patches, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 01/21] commit: Add NULL check for overlay_bs, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 02/21] block: add clock_type field to ThrottleGroup, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 03/21] block: remove timer canceling in throttle_config(),
Kevin Wolf <=
- [Qemu-devel] [PULL 04/21] block/vmdk: Report failures in vmdk_read_cid(), Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 05/21] block/vpc.c: Handle write failures in get_image_offset(), Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 09/21] block/qapi: Use blk_all_next() for query-block, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 08/21] block: Make blk_all_next() public, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 07/21] block/qapi: Add qdev device name to query-block, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 06/21] block: Make blk_get_attached_dev_id() public, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 10/21] block: List anonymous device BBs in query-block, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 11/21] ide: bdrv_attach_dev() for empty CD-ROM, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 14/21] qemu-iotests: Test unplug of -device without drive, Kevin Wolf, 2017/07/18
- [Qemu-devel] [PULL 12/21] scsi-disk: bdrv_attach_dev() for empty CD-ROM, Kevin Wolf, 2017/07/18