[Libvir] RFC PATCH - Initial NodeGetCellsFreeMemory patch
beth kon
eak at us.ibm.com
Fri Sep 21 16:31:51 UTC 2007
Richard W.M. Jones wrote:
> beth kon wrote:
>
> Comments on the code itself:
>
>
> + * @freeMems: pointer to the array of long long
> + * @startCell: index of first cell to return freeMems info on (0 to
> + * maxCells - 1).
> + * @maxCells: number of entries available in freeMems (-1 for sum of
> + * free memory across all cells, returned in freeMems[0])
>
> I'm slightly confused by this documentation. If maxCells > 0, does
> this only fill a subset of the array freeMems?
>
maxCells is size of the freeMems array. I will clarify.
> - if ((freeMems == NULL) || (nbCells <= 0)) {
> + if ((freeMems == NULL) || (maxCells <= 0) || (startCell >
> maxCells - 1)) {
> virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
> return (-1);
> }
>
> But we allow maxCells == -1 though, so this test is wrong.
>
> + if ((conn == NULL) || (freeMems == NULL) || (maxCells < 0))
> + return -1;
>
yep. I will clean up the maxCells and startCell code.
> Should always call the error function before returning an error.
> Unfortunately the error handling in libvirt is over-engineered in the
> extreme and, what is more, in order to get around this
> over-engineering we have defined "simpler" wrapper error functions in
> different / incompatible ways in each file. In this particular file
> (xen_internal.c) the "simpler" error function is called virXenErrorFunc.
>
I saw other cases where this was done and was following that precedent,
though usually I did call an error function. In any case, it is
obviously better to do so, so I will correct this.
>
> + /* get actual number of cells */
> + if (xenDaemonNodeGetInfo(conn, nodeInfoPtr)) {
> + virXenError(VIR_ERR_XEN_CALL, " cannot determine actual
> number of cells", 0);
> + return -1;
> + }
> + nbCells = nodeInfoPtr->nodes;
>
> Is there a way for me to find out the total number of cells (nbCells)?
It is returned by virNodeGetInfo, and also in the virNodeGetTopology XML
string (which I'm currently working on). Do you think it should also be
included here? I would think it reasonable to assume the caller has done
virNodeGetInfo before virNodeGetCellsFreeMemory, though it is easy
enough to add here.
>
> + if (maxCells > nbCells)
> + maxCells = nbCells;
>
> I would prefer to return an error here, but it's not too bad because
> the return value tells us how many cells were filled.
>
> + if (startCell > nbCells - 1)
> + return -1;
>
> Surely, the condition should be `startCell + maxCells > nbCells'?
I will rework all this so we can discuss the new version.
Thanks for the comments!
>
> Rich.
>
>
--
Elizabeth Kon (Beth)
IBM Linux Technology Center
Open Hypervisor Team
email: eak at us.ibm.com
More information about the libvir-list
mailing list