提交 7b25be9d 编写于 作者: M Martin Kletzander 提交者: Cole Robinson

qemu: Limit maximum block device I/O tune values

The values are currently limited to LLONG_MAX which causes some
problems.  QEMU conveniently changed their maximum to 1e15 (1 PB) which
is enough for some time and we need to adapt to that so that we don't
throw "Unknown error" messages.  Strictly limiting these values actually
fixes some corner case values (off-by-one checks in QEMU probably).

Since values out of the new specified range do not overflow anything,
change the type of error as well.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1317531Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
(cherry picked from commit 2d04f6de)
上级 ca9180ad
......@@ -1400,22 +1400,22 @@ qemuBuildDriveStr(virConnectPtr conn,
goto error;
}
if (disk->blkdeviotune.total_bytes_sec > LLONG_MAX ||
disk->blkdeviotune.read_bytes_sec > LLONG_MAX ||
disk->blkdeviotune.write_bytes_sec > LLONG_MAX ||
disk->blkdeviotune.total_iops_sec > LLONG_MAX ||
disk->blkdeviotune.read_iops_sec > LLONG_MAX ||
disk->blkdeviotune.write_iops_sec > LLONG_MAX ||
disk->blkdeviotune.total_bytes_sec_max > LLONG_MAX ||
disk->blkdeviotune.read_bytes_sec_max > LLONG_MAX ||
disk->blkdeviotune.write_bytes_sec_max > LLONG_MAX ||
disk->blkdeviotune.total_iops_sec_max > LLONG_MAX ||
disk->blkdeviotune.read_iops_sec_max > LLONG_MAX ||
disk->blkdeviotune.write_iops_sec_max > LLONG_MAX ||
disk->blkdeviotune.size_iops_sec > LLONG_MAX) {
virReportError(VIR_ERR_OVERFLOW,
if (disk->blkdeviotune.total_bytes_sec > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.read_bytes_sec > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.write_bytes_sec > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.total_iops_sec > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.read_iops_sec > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.write_iops_sec > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.total_bytes_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.read_bytes_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.write_bytes_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.total_iops_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.read_iops_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.write_iops_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
disk->blkdeviotune.size_iops_sec > QEMU_BLOCK_IOTUNE_MAX) {
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED,
_("block I/O throttle limit must "
"be less than %llu using QEMU"), LLONG_MAX);
"be less than %llu using QEMU"), QEMU_BLOCK_IOTUNE_MAX);
goto error;
}
......
......@@ -40,6 +40,8 @@
# define QEMU_DRIVE_HOST_PREFIX "drive-"
# define QEMU_FSDEV_HOST_PREFIX "fsdev-"
# define QEMU_BLOCK_IOTUNE_MAX 1000000000000000LL
VIR_ENUM_DECL(qemuVideo)
typedef struct _qemuBuildCommandLineCallbacks qemuBuildCommandLineCallbacks;
......
......@@ -17506,10 +17506,10 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
for (i = 0; i < nparams; i++) {
virTypedParameterPtr param = &params[i];
if (param->value.ul > LLONG_MAX) {
virReportError(VIR_ERR_OVERFLOW,
if (param->value.ul > QEMU_BLOCK_IOTUNE_MAX) {
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED,
_("block I/O throttle limit value must"
" be less than %llu"), LLONG_MAX);
" be less than %llu"), QEMU_BLOCK_IOTUNE_MAX);
goto endjob;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册