throttle: refuse bps_max/iops_max without bps/iops

The bps_max/iops_max values are meaningless without corresponding
bps/iops values.  Reported an error if bps_max/iops_max is given without
bps/iops.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Message-id: 1438683733-21111-2-git-send-email-stefanha@redhat.com
This commit is contained in:
Stefan Hajnoczi 2015-08-04 11:22:12 +01:00
parent 2be4f242b5
commit ee2bdc33c9
3 changed files with 23 additions and 0 deletions

View file

@ -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;
}

View file

@ -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);

View file

@ -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)
{