[libvirt] [PATCH] qemu: Ensure the cpuset is formated as expected before passing to cgroup
Osier Yang
jyang at redhat.com
Thu Aug 16 08:46:49 UTC 2012
On 2012年08月16日 13:06, Eric Blake wrote:
> On 08/15/2012 09:35 PM, Osier Yang wrote:
>> The parameter value for cpuset could be in special format like
>> "0-10,^7", which is not recongnized by cgroup. This patch is to
>
> s/recongnized/recognized/
>
>> ensure the cpuset is formated as expected before passing it to
>
> s/formated/formatted/
>
>> cgroup. As a side effect, after the patch, it parses the cpuset
>> early before cgroup setting, to avoid the rollback if cpuset
>> parsing fails afterwards.
>> ---
>> src/qemu/qemu_driver.c | 77 +++++++++++++++++++++++++----------------------
>> 1 files changed, 41 insertions(+), 36 deletions(-)
>>
>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index 369e8ed..fc412a1 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -6952,8 +6952,23 @@ qemuDomainSetNumaParameters(virDomainPtr dom,
>> }
>> } else if (STREQ(param->field, VIR_DOMAIN_NUMA_NODESET)) {
>> int rc;
>> - bool savedmask;
>> - char oldnodemask[VIR_DOMAIN_CPUMASK_LEN];
>> + char *nodeset = NULL;
>> + char *nodeset_str = NULL;
>> +
>> + if (VIR_ALLOC_N(nodeset, VIR_DOMAIN_CPUMASK_LEN)< 0) {
>> + virReportOOMError();
>> + ret = -1;
>> + goto cleanup;
>> + };
>> +
>> + if (virDomainCpuSetParse(params[i].value.s,
>> + 0, nodeset,
>> + VIR_DOMAIN_CPUMASK_LEN)< 0) {
>> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> + _("Failed to parse nodeset"));
>> + ret = -1;
>> + continue;
>> + }
>
> We have enough of this open-coded conversions in the code base that it
> would be worth common helper routines to make the conversion much easier
> to use in the clients (for a later patch). But for the purposes of
> fixing the bug at hand, your patch does the trick.
>
>>
>> if (flags& VIR_DOMAIN_AFFECT_LIVE) {
>> if (vm->def->numatune.memory.mode !=
>> @@ -6961,72 +6976,62 @@ qemuDomainSetNumaParameters(virDomainPtr dom,
>> virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>> _("change of nodeset for running domain "
>> "requires strict numa mode"));
>> + VIR_FREE(nodeset);
>> ret = -1;
>> continue;
>> }
>> - rc = virCgroupSetCpusetMems(group, params[i].value.s);
>> - if (rc != 0) {
>> +
>> + /* Ensure the cpuset string is formated before passing to cgroup */
>
> s/formated/formatted/
hum, you corrected my typos on "recongnized" and "formated" several
times. /shy.
>
> ACK with nits fixed.
Thanks, pushed with the nits fixed.
Regards,
Osier
More information about the libvir-list
mailing list