[libvirt] [PATCHv2 15/15] virsh: improve memory unit parsing

Peter Krempa pkrempa at redhat.com
Wed Mar 7 13:14:49 UTC 2012


On 03/06/2012 01:34 AM, Eric Blake wrote:
> The last vestige of the inaccurate 'kilobytes' when we meant 1024 is
> now gone.  And virsh is now useful for setting memory in units other
> than KiB.
>
> * tools/virsh.c (cmdSetmem, cmdSetmaxmem): Use new helper routine,
> allow passing bogus arguments on to hypervisor to test driver
> sanity checking, and fix leak on parse error.
> (cmdMemtuneGetSize): New helper.
> (cmdMemtune): Use it.
> * tools/virsh.pod (setmem, setmaxmem, memtune): Document this.
> ---
>
>   static const vshCmdOptDef opts_memtune[] = {
>       {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
>       {"hard-limit", VSH_OT_INT, VSH_OFLAG_NONE,
> -     N_("Max memory in kilobytes")},
> +     N_("Max memory, as scaled integer (default KiB)")},
>       {"soft-limit", VSH_OT_INT, VSH_OFLAG_NONE,
> -     N_("Memory during contention in kilobytes")},
> +     N_("Memory during contention, as scaled integer (default KiB)")},
>       {"swap-hard-limit", VSH_OT_INT, VSH_OFLAG_NONE,
> -     N_("Max memory plus swap in kilobytes")},
> +     N_("Max memory plus swap, as scaled integer (default KiB)")},
>       {"min-guarantee", VSH_OT_INT, VSH_OFLAG_NONE,
> -     N_("Min guaranteed memory in kilobytes")},
> +     N_("Min guaranteed memory, as scaled integer (default KiB)")},
>       {"config", VSH_OT_BOOL, 0, N_("affect next boot")},
>       {"live", VSH_OT_BOOL, 0, N_("affect running domain")},
>       {"current", VSH_OT_BOOL, 0, N_("affect current domain")},
>       {NULL, 0, 0, NULL}
>   };
>
> +static int
> +cmdMemtuneGetSize(const vshCmd *cmd, const char *name, long long *value)

As this is a helper function rename it please to vshMemtuneGetSize to 
avoid confusion with command functions.

> +{
> +    int ret;
> +    unsigned long long tmp;
> +    const char *str;
> +    char *end;
> +
> +    ret = vshCommandOptString(cmd, name,&str);
> +    if (ret<= 0)
> +        return ret;
> +    if (virStrToLong_ll(str,&end, 10, value)<  0)
> +        return -1;
> +    if (*value<  0) {
> +        *value = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED;
> +        return 1;
> +    }
> +    tmp = *value;
> +    if (virScaleInteger(&tmp, end, 1024, LLONG_MAX)<  0)
> +        return -1;
> +    *value = VIR_DIV_UP(tmp, 1024);
> +    return 0;
> +}
> +
>   static bool
> -cmdMemtune(vshControl * ctl, const vshCmd * cmd)
> +cmdMemtune(vshControl *ctl, const vshCmd *cmd)
>   {
>       virDomainPtr dom;
>       long long hard_limit = 0, soft_limit = 0, swap_hard_limit = 0;

ACK with the name change.

Peter




More information about the libvir-list mailing list