qemu: fix inf-loop in blkio parameters

https://bugzilla.redhat.com/show_bug.cgi?id=770520

We had two nested loops both trying to use 'i' as the iteration
variable, which can result in an infinite loop when the inner
loop interferes with the outer loop.  Introduced in commit 93ab585.

* src/qemu/qemu_driver.c (qemuDomainSetBlkioParameters): Don't
reuse iteration variable across two loops.
This commit is contained in:
Eric Blake 2011-12-28 06:53:27 -07:00
parent 96b3716c2a
commit 1a3f6608aa

View File

@ -5982,6 +5982,8 @@ static int qemuDomainSetBlkioParameters(virDomainPtr dom,
} else if (STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WEIGHT)) { } else if (STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WEIGHT)) {
size_t ndevices; size_t ndevices;
virBlkioDeviceWeightPtr devices = NULL; virBlkioDeviceWeightPtr devices = NULL;
int j;
if (param->type != VIR_TYPED_PARAM_STRING) { if (param->type != VIR_TYPED_PARAM_STRING) {
qemuReportError(VIR_ERR_INVALID_ARG, "%s", qemuReportError(VIR_ERR_INVALID_ARG, "%s",
_("invalid type for device_weight tunable, " _("invalid type for device_weight tunable, "
@ -5996,19 +5998,19 @@ static int qemuDomainSetBlkioParameters(virDomainPtr dom,
ret = -1; ret = -1;
continue; continue;
} }
for (i = 0; i < ndevices; i++) { for (j = 0; j < ndevices; i++) {
rc = virCgroupSetBlkioDeviceWeight(group, rc = virCgroupSetBlkioDeviceWeight(group,
devices[i].path, devices[j].path,
devices[i].weight); devices[j].weight);
if (rc < 0) { if (rc < 0) {
virReportSystemError(-rc, virReportSystemError(-rc,
_("Unable to set io device weight " _("Unable to set io device weight "
"for path %s"), "for path %s"),
devices[i].path); devices[j].path);
break; break;
} }
} }
if (i != ndevices) { if (j != ndevices) {
ret = -1; ret = -1;
continue; continue;
} }