[libvirt] [PATCH] nodeinfo: fix nodeGetFreePages when max node is zero

Jincheng Miao jmiao at redhat.com
Wed Sep 24 12:00:19 UTC 2014


On 09/24/2014 07:40 PM, Michal Privoznik wrote:
> On 24.09.2014 07:45, Jincheng Miao wrote:
>> In nodeGetFreePages, if startCell is given by '0',
>> and the max node number is '0' too. The for-loop
>> wouldn't be executed.
>> So convert it to while-loop.
>>
>> Before:
>>> virsh freepages --cellno 0 --pagesize 4
>> error: internal error: no suitable info found
>>
>> After:
>>> virsh freepages --cellno 0 --pagesize 4
>> 4KiB: 472637
>>
>> Signed-off-by: Jincheng Miao <jmiao at redhat.com>
>> ---
>>   src/nodeinfo.c | 7 ++++---
>>   1 file changed, 4 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/nodeinfo.c b/src/nodeinfo.c
>> index 2459922..1fe190a 100644
>> --- a/src/nodeinfo.c
>> +++ b/src/nodeinfo.c
>> @@ -2042,18 +2042,19 @@ nodeGetFreePages(unsigned int npages,
>>       }
>>
>>       lastCell = MIN(lastCell, startCell + cellCount);
>> +    cell = startCell;
>>
>> -    for (cell = startCell; cell < lastCell; cell++) {
>> +    do {
>>           for (i = 0; i < npages; i++) {
>>               unsigned int page_size = pages[i];
>>               unsigned int page_free;
>>
>> -            if (virNumaGetPageInfo(cell, page_size, 0, NULL, 
>> &page_free) < 0)
>> +            if (virNumaGetPageInfo(cell++, page_size, 0, NULL, 
>> &page_free) < 0)
>>                   goto cleanup;
>>
>>               counts[ncounts++] = page_free;
>>           }
>> -    }
>> +    } while (cell < lastCell);
>>
>>       if (!ncounts) {
>>           virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>>
>
> There's no need to switch to do-while loop. All what is needed is cell 
> <= lastCell in the for loop. I'm rewriting the patch and pushing. ACK.

Wait, if change the for condition to 'cell <= lastCell', and pass 
startCell == -1,
the for-loop will execute twice, and will overwrite counts[1] which is 
not allocated.

>
> Michal




More information about the libvir-list mailing list