[libvirt] [PATCH v4 1/2] libxl: fix node ranges in libxlNodeGetCellsFreeMemory()

Jim Fehlig jfehlig at suse.com
Fri Aug 9 16:04:15 UTC 2013


Dario Faggioli wrote:
> 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).
>   

Ok, makes sense.

> 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.
>   

ACK and pushed.  Thanks!

Regards,
Jim

> Signed-off-by: Dario Faggioli <dario.faggioli at citrix.com>
> Cc: Daniel P. Berrange <berrange at redhat.com>
> ---
>  src/libxl/libxl_driver.c |   14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 9e9bc89..04058d3 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -4107,23 +4107,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)
>
>
>
>   




More information about the libvir-list mailing list