[libvirt] [PATCH] conf: fix use the wrong type for period

lhuang lhuang at redhat.com
Mon Mar 16 03:09:23 UTC 2015


On 03/13/2015 10:38 PM, Martin Kletzander wrote:
> On Fri, Mar 13, 2015 at 05:15:32PM +0800, Luyao Huang wrote:
>> https://bugzilla.redhat.com/show_bug.cgi?id=1140958
>>
>> When we set period as unsigned int max value 4294967295 and
>> start the vm, qemu will report error. This becuase we define period
>> as a unsigned int and parse it as a unsigned int, but we use it as
>> a int when set it via QMP in qemuMonitorJSONSetMemoryStatsPeriod,
>> so 4294967295 turn to -1 when we send the QMP command.
>>
>> After check the qemu's code this value type should be int, and found
>> a qemu commit 1f9296b for this values range.
>>
>> Seems no other hypervisor vm use this so i add a check when we parse it.
>>
>
> Where to start.  NACK to this patch as is.  Domains that have
> INT_MAX < period < UINT_MAX will disappear after libvirt is restarted
> and that's not backwards compatible.
>

Okay, thanks for pointing out this.

> I couldn't make sense of the commit message, but at least the aim is

Hmm...my English need Improvement :)

> visible from the code.  Anyway, I believe Erik already worked on this
> issue as I gave him few hints regarding this on one of his patches.
> Did you talk together about it?  It would be a pity if the work was
> blindly doubled.
>

Oh, Sorry, i didn't noticed this, i should talk with Erik first before 
wrote this patch.

> Looking at this commit message I made a diff to squash in, so I'll
> post a v2 with it.

I saw your patches, good idea to avoid vm which have big period settings 
loss track after update libvirtd, thanks a lot for your review.

Luyao

>
>> Signed-off-by: Luyao Huang <lhuang at redhat.com>
>> ---
>> src/conf/domain_conf.c | 3 ++-
>> src/conf/domain_conf.h | 2 +-
>> 2 files changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index 127fc91..54bd5aa 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -10452,7 +10452,8 @@ virDomainMemballoonDefParseXML(xmlNodePtr node,
>>     }
>>
>>     ctxt->node = node;
>> -    if (virXPathUInt("string(./stats/@period)", ctxt, &def->period) 
>> < -1) {
>> +    if (virXPathInt("string(./stats/@period)", ctxt, &def->period) < 
>> -1 ||
>> +        def->period < 0) {
>>         virReportError(VIR_ERR_XML_ERROR, "%s",
>>                        _("invalid statistics collection period"));
>>         goto error;
>> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
>> index ea463cb..ee0f5fd 100644
>> --- a/src/conf/domain_conf.h
>> +++ b/src/conf/domain_conf.h
>> @@ -1556,7 +1556,7 @@ enum {
>> struct _virDomainMemballoonDef {
>>     int model;
>>     virDomainDeviceInfo info;
>> -    unsigned int period; /* seconds between collections */
>> +    int period; /* seconds between collections */
>> };
>>
>> struct _virDomainNVRAMDef {
>> -- 
>> 1.8.3.1
>>
>> -- 
>> libvir-list mailing list
>> libvir-list at redhat.com
>> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list