From: Dario Faggioli Date: Fri, 9 Aug 2013 09:05:58 +0000 (+0200) Subject: libxl: fix node ranges in libxlNodeGetCellsFreeMemory() X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=625980cc54f9e56cf892189d69cf946dd6bf2ce8;p=libvirt.git libxl: fix node ranges in libxlNodeGetCellsFreeMemory() introduced by cs 4b9eec50fe2c23343 ("libxl: implement per NUMA node free memory reporting"). What was wrong was that libxl_get_numainfo() put in nr_nodes the actual number of host NUMA nodes, not the highest node ID (like libnuma's numa_max_node() does instead). While at it, turn the failure of libxl_get_numainfo() from a simple warning to a proper error, as requested during the review of another patch of the original series. Signed-off-by: Dario Faggioli Cc: Daniel P. Berrange --- diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 8e9a3d0199..cc9e7724ce 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -4127,23 +4127,23 @@ libxlNodeGetCellsFreeMemory(virConnectPtr conn, if (virNodeGetCellsFreeMemoryEnsureACL(conn) < 0) return -1; - /* Early failure is probably worth just a warning */ numa_info = libxl_get_numainfo(driver->ctx, &nr_nodes); if (numa_info == NULL || nr_nodes == 0) { - VIR_WARN("libxl_get_numainfo failed to retrieve NUMA data"); - return 0; + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("libxl_get_numainfo failed")); + goto cleanup; } /* Check/sanitize the cell range */ - if (startCell > nr_nodes) { + if (startCell >= nr_nodes) { virReportError(VIR_ERR_INTERNAL_ERROR, _("start cell %d out of range (0-%d)"), - startCell, nr_nodes); + startCell, nr_nodes - 1); goto cleanup; } lastCell = startCell + maxCells - 1; - if (lastCell > nr_nodes) - lastCell = nr_nodes; + if (lastCell >= nr_nodes) + lastCell = nr_nodes - 1; for (numCells = 0, n = startCell; n <= lastCell; n++) { if (numa_info[n].size == LIBXL_NUMAINFO_INVALID_ENTRY)