[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