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(a)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