diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2015-08-14 15:51:24 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2015-08-14 15:51:24 +0100 |
commit | 8e0adf64140ab93aba79be2f0227a47eda78e464 (patch) | |
tree | f9de7df220b45ac9eb8dd8c2390dad874728b175 | |
parent | be1f13ac9d9fc21908975460652a72f5f0c018c5 (diff) | |
parent | 92e11a17612108b1729bde4ce61aad0cc1ce5889 (diff) |
Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging
# gpg: Signature made Fri 14 Aug 2015 15:41:14 BST using RSA key ID 81AB73C8
# gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>"
# gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>"
* remotes/stefanha/tags/block-pull-request:
throttle: add throttle_max_is_missing_limit() test
throttle: refuse bps_max/iops_max without bps/iops
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | blockdev.c | 6 | ||||
-rw-r--r-- | include/qemu/throttle.h | 2 | ||||
-rw-r--r-- | tests/test-throttle.c | 21 | ||||
-rw-r--r-- | util/throttle.c | 15 |
4 files changed, 44 insertions, 0 deletions
diff --git a/blockdev.c b/blockdev.c index 62a4586cd6..4125ff642a 100644 --- a/blockdev.c +++ b/blockdev.c @@ -337,6 +337,12 @@ static bool check_throttle_config(ThrottleConfig *cfg, Error **errp) return false; } + if (throttle_max_is_missing_limit(cfg)) { + error_setg(errp, "bps_max/iops_max require corresponding" + " bps/iops values"); + return false; + } + return true; } diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h index 995b2d5957..12faaad959 100644 --- a/include/qemu/throttle.h +++ b/include/qemu/throttle.h @@ -114,6 +114,8 @@ bool throttle_conflicting(ThrottleConfig *cfg); bool throttle_is_valid(ThrottleConfig *cfg); +bool throttle_max_is_missing_limit(ThrottleConfig *cfg); + void throttle_config(ThrottleState *ts, ThrottleTimers *tt, ThrottleConfig *cfg); diff --git a/tests/test-throttle.c b/tests/test-throttle.c index 016844546a..85c9b6ceed 100644 --- a/tests/test-throttle.c +++ b/tests/test-throttle.c @@ -329,6 +329,26 @@ static void test_is_valid(void) test_is_valid_for_value(1, true); } +static void test_max_is_missing_limit(void) +{ + int i; + + for (i = 0; i < BUCKETS_COUNT; i++) { + memset(&cfg, 0, sizeof(cfg)); + cfg.buckets[i].max = 100; + cfg.buckets[i].avg = 0; + g_assert(throttle_max_is_missing_limit(&cfg)); + + cfg.buckets[i].max = 0; + cfg.buckets[i].avg = 0; + g_assert(!throttle_max_is_missing_limit(&cfg)); + + cfg.buckets[i].max = 0; + cfg.buckets[i].avg = 100; + g_assert(!throttle_max_is_missing_limit(&cfg)); + } +} + static void test_have_timer(void) { /* zero structures */ @@ -591,6 +611,7 @@ int main(int argc, char **argv) g_test_add_func("/throttle/config/enabled", test_enabled); g_test_add_func("/throttle/config/conflicting", test_conflicting_config); g_test_add_func("/throttle/config/is_valid", test_is_valid); + g_test_add_func("/throttle/config/max", test_max_is_missing_limit); g_test_add_func("/throttle/config_functions", test_config_functions); g_test_add_func("/throttle/accounting", test_accounting); g_test_add_func("/throttle/groups", test_groups); diff --git a/util/throttle.c b/util/throttle.c index 706c13111e..1113671ecf 100644 --- a/util/throttle.c +++ b/util/throttle.c @@ -300,6 +300,21 @@ bool throttle_is_valid(ThrottleConfig *cfg) return !invalid; } +/* check if bps_max/iops_max is used without bps/iops + * @cfg: the throttling configuration to inspect + */ +bool throttle_max_is_missing_limit(ThrottleConfig *cfg) +{ + int i; + + for (i = 0; i < BUCKETS_COUNT; i++) { + if (cfg->buckets[i].max && !cfg->buckets[i].avg) { + return true; + } + } + return false; +} + /* fix bucket parameters */ static void throttle_fix_bucket(LeakyBucket *bkt) { |