mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-25 21:02:22 +00:00
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=1317531 Signed-off-by: Martin Kletzander <mkletzan@redhat.com> (cherry picked from commit 2d04f6de77d437fa60361950e5f18fac8c1c922d)
This commit is contained in:
parent
ca9180ad63
commit
7b25be9df4
@ -1400,22 +1400,22 @@ qemuBuildDriveStr(virConnectPtr conn,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disk->blkdeviotune.total_bytes_sec > LLONG_MAX ||
|
if (disk->blkdeviotune.total_bytes_sec > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.read_bytes_sec > LLONG_MAX ||
|
disk->blkdeviotune.read_bytes_sec > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.write_bytes_sec > LLONG_MAX ||
|
disk->blkdeviotune.write_bytes_sec > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.total_iops_sec > LLONG_MAX ||
|
disk->blkdeviotune.total_iops_sec > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.read_iops_sec > LLONG_MAX ||
|
disk->blkdeviotune.read_iops_sec > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.write_iops_sec > LLONG_MAX ||
|
disk->blkdeviotune.write_iops_sec > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.total_bytes_sec_max > LLONG_MAX ||
|
disk->blkdeviotune.total_bytes_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.read_bytes_sec_max > LLONG_MAX ||
|
disk->blkdeviotune.read_bytes_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.write_bytes_sec_max > LLONG_MAX ||
|
disk->blkdeviotune.write_bytes_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.total_iops_sec_max > LLONG_MAX ||
|
disk->blkdeviotune.total_iops_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.read_iops_sec_max > LLONG_MAX ||
|
disk->blkdeviotune.read_iops_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.write_iops_sec_max > LLONG_MAX ||
|
disk->blkdeviotune.write_iops_sec_max > QEMU_BLOCK_IOTUNE_MAX ||
|
||||||
disk->blkdeviotune.size_iops_sec > LLONG_MAX) {
|
disk->blkdeviotune.size_iops_sec > QEMU_BLOCK_IOTUNE_MAX) {
|
||||||
virReportError(VIR_ERR_OVERFLOW,
|
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED,
|
||||||
_("block I/O throttle limit must "
|
_("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;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +40,8 @@
|
|||||||
# define QEMU_DRIVE_HOST_PREFIX "drive-"
|
# define QEMU_DRIVE_HOST_PREFIX "drive-"
|
||||||
# define QEMU_FSDEV_HOST_PREFIX "fsdev-"
|
# define QEMU_FSDEV_HOST_PREFIX "fsdev-"
|
||||||
|
|
||||||
|
# define QEMU_BLOCK_IOTUNE_MAX 1000000000000000LL
|
||||||
|
|
||||||
VIR_ENUM_DECL(qemuVideo)
|
VIR_ENUM_DECL(qemuVideo)
|
||||||
|
|
||||||
typedef struct _qemuBuildCommandLineCallbacks qemuBuildCommandLineCallbacks;
|
typedef struct _qemuBuildCommandLineCallbacks qemuBuildCommandLineCallbacks;
|
||||||
|
@ -17506,10 +17506,10 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
|
|||||||
for (i = 0; i < nparams; i++) {
|
for (i = 0; i < nparams; i++) {
|
||||||
virTypedParameterPtr param = ¶ms[i];
|
virTypedParameterPtr param = ¶ms[i];
|
||||||
|
|
||||||
if (param->value.ul > LLONG_MAX) {
|
if (param->value.ul > QEMU_BLOCK_IOTUNE_MAX) {
|
||||||
virReportError(VIR_ERR_OVERFLOW,
|
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED,
|
||||||
_("block I/O throttle limit value must"
|
_("block I/O throttle limit value must"
|
||||||
" be less than %llu"), LLONG_MAX);
|
" be less than %llu"), QEMU_BLOCK_IOTUNE_MAX);
|
||||||
goto endjob;
|
goto endjob;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user