[libvirt] [PATCH] cgroup:fix bug to keep --device-weights value persistent
Guannan Ren
gren at redhat.com
Mon Feb 6 17:15:25 UTC 2012
ping :)
On 02/02/2012 07:57 PM, Guannan Ren wrote:
> src/qemu/qemu_driver.c
> When run "virsh blkiotune dom --device-weights /dev/sda,400 --config"
> it couldn't be persistent after dom restart.
> The patch fix it.
>
> ---
> src/qemu/qemu_driver.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 51 insertions(+), 2 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index d66140b..1a53088 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -5975,9 +5975,13 @@ qemuDomainMergeDeviceWeights(virBlkioDeviceWeightPtr *def, size_t *def_size,
> virReportOOMError();
> return -1;
> }
> - (*def)[*def_size - 1].path = dw->path;
> + (*def)[*def_size - 1].path = strdup(dw->path);
> + if (!(*def)[*def_size - 1].path) {
> + virReportOOMError();
> + return -1;
> + }
> +
> (*def)[*def_size - 1].weight = dw->weight;
> - dw->path = NULL;
> }
> }
>
> @@ -5985,6 +5989,46 @@ qemuDomainMergeDeviceWeights(virBlkioDeviceWeightPtr *def, size_t *def_size,
> }
>
> static int
> +qemuDomainiDefineDeviceWeights(virDomainDefPtr persistentDef,
> + virBlkioDeviceWeightPtr devices, size_t ndevices)
> +{
> + int i;
> + virBlkioDeviceWeightPtr dw, result = NULL;
> +
> + if (!persistentDef->blkio.devices) {
> + if (VIR_ALLOC_N(result, ndevices)< 0) {
> + virReportOOMError();
> + goto cleanup;
> + }
> +
> + for (i = 0; i< ndevices; i++) {
> + dw =&devices[i];
> + result[i].path = strdup(dw->path);
> + if (!result[i].path) {
> + virReportOOMError();
> + goto cleanup;
> + }
> + result[i].weight = dw->weight;
> + }
> +
> + persistentDef->blkio.devices = result;
> + } else {
> + if (qemuDomainMergeDeviceWeights(&persistentDef->blkio.devices,
> +&persistentDef->blkio.ndevices,
> + devices, ndevices)< 0)
> + return -1;
> + }
> +
> + persistentDef->blkio.ndevices = ndevices;
> + return 0;
> +
> +cleanup:
> + virBlkioDeviceWeightArrayClear(result, ndevices);
> + VIR_FREE(result);
> + return -1;
> +}
> +
> +static int
> qemuDomainSetBlkioParameters(virDomainPtr dom,
> virTypedParameterPtr params,
> int nparams,
> @@ -6116,6 +6160,11 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
> ret = -1;
> continue;
> }
> + if (qemuDomainiDefineDeviceWeights(persistentDef,
> + devices,
> + ndevices)< 0)
> + ret = -1;
> +
> if (qemuDomainMergeDeviceWeights(&vm->def->blkio.devices,
> &vm->def->blkio.ndevices,
> devices, ndevices)< 0)
More information about the libvir-list
mailing list