[libvirt] [PATCH 1/8] virsh: blockjob: Extract block job info code into a separate function

John Ferlan jferlan at redhat.com
Fri May 8 11:20:43 UTC 2015



On 04/30/2015 10:45 AM, Peter Krempa wrote:
> cmdBlockJob will be converted to a hub that will call into the
> individual executor functions.
> ---
>  tools/virsh-domain.c | 93 +++++++++++++++++++++++++++++++---------------------
>  1 file changed, 56 insertions(+), 37 deletions(-)
> 

This doesn't compile for me... gcc (GCC) 4.9.2 20150212

> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index 4b627e1..01c6b9e 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -2457,47 +2457,19 @@ vshDomainBlockJobToString(int type)
>      return str ? _(str) : _("Unknown job");
>  }
> 
> +
>  static bool
> -cmdBlockJob(vshControl *ctl, const vshCmd *cmd)
> +vshBlockJobInfo(vshControl *ctl,
> +                virDomainPtr dom,
> +                const char *path,
> +                bool raw,
> +                bool bytes)
>  {
>      virDomainBlockJobInfo info;
> -    bool ret = false;
> -    int rc = -1;

^^^

> -    bool raw = vshCommandOptBool(cmd, "raw");
> -    bool bytes = vshCommandOptBool(cmd, "bytes");
> -    bool abortMode = (vshCommandOptBool(cmd, "abort") ||
> -                      vshCommandOptBool(cmd, "async") ||
> -                      vshCommandOptBool(cmd, "pivot"));
> -    bool infoMode = vshCommandOptBool(cmd, "info") || raw;
> -    bool bandwidth = vshCommandOptBool(cmd, "bandwidth");
> -    virDomainPtr dom = NULL;
> -    const char *path;
> -    unsigned int flags = 0;
>      unsigned long long speed;
> -
> -    if (abortMode + infoMode + bandwidth > 1) {
> -        vshError(ctl, "%s",
> -                 _("conflict between abort, info, and bandwidth modes"));
> -        return false;
> -    }
> -    /* XXX also support --bytes with bandwidth mode */
> -    if (bytes && (abortMode || bandwidth)) {
> -        vshError(ctl, "%s", _("--bytes requires info mode"));
> -        return false;
> -    }
> -
> -    if (abortMode)
> -        return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_ABORT, NULL);
> -    if (bandwidth)
> -        return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_SPEED, NULL);
> -
> -    /* Everything below here is for --info mode */
> -    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
> -        goto cleanup;
> -
> -    /* XXX Allow path to be optional to list info on all devices at once */
> -    if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0)
> -        goto cleanup;
> +    unsigned int flags = 0;
> +    bool ret = false;
> +    int rc;

^^^
virsh-domain.c: In function 'cmdBlockJob':
virsh-domain.c:2515:8: error: 'rc' may be used uninitialized in this
function [-Werror=maybe-uninitialized]
     if (rc == 0) {
        ^
virsh-domain.c:2472:9: note: 'rc' was declared here
     int rc;
         ^
virsh-domain.c:2532:13: error: 'speed' may be used uninitialized in this
function [-Werror=maybe-uninitialized]
             vshPrint(ctl, _("    Bandwidth limit: %llu bytes/s (%-.3lf
%s/s)"),
             ^
virsh-domain.c:2469:24: note: 'speed' was declared here
     unsigned long long speed;
                        ^
Initializing rc to -1 resolves the issue

ACK with the adjustment.

John

> 
>      /* If bytes were requested, or if raw mode is not forcing a MiB/s
>       * query and cache can't prove failure, then query bytes/sec.  */
> @@ -2562,7 +2534,54 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd)
>          }
>          vshPrint(ctl, "\n");
>      }
> +
>      ret = true;
> +
> + cleanup:
> +    return ret;
> +}
> +
> +
> +static bool
> +cmdBlockJob(vshControl *ctl, const vshCmd *cmd)
> +{
> +    bool ret = false;
> +    bool raw = vshCommandOptBool(cmd, "raw");
> +    bool bytes = vshCommandOptBool(cmd, "bytes");
> +    bool abortMode = (vshCommandOptBool(cmd, "abort") ||
> +                      vshCommandOptBool(cmd, "async") ||
> +                      vshCommandOptBool(cmd, "pivot"));
> +    bool infoMode = vshCommandOptBool(cmd, "info") || raw;
> +    bool bandwidth = vshCommandOptBool(cmd, "bandwidth");
> +    virDomainPtr dom = NULL;
> +    const char *path;
> +
> +    if (abortMode + infoMode + bandwidth > 1) {
> +        vshError(ctl, "%s",
> +                 _("conflict between abort, info, and bandwidth modes"));
> +        return false;
> +    }
> +    /* XXX also support --bytes with bandwidth mode */
> +    if (bytes && (abortMode || bandwidth)) {
> +        vshError(ctl, "%s", _("--bytes requires info mode"));
> +        return false;
> +    }
> +
> +    if (abortMode)
> +        return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_ABORT, NULL);
> +    if (bandwidth)
> +        return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_SPEED, NULL);
> +
> +    /* Everything below here is for --info mode */
> +    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
> +        goto cleanup;
> +
> +    /* XXX Allow path to be optional to list info on all devices at once */
> +    if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0)
> +        goto cleanup;
> +
> +    ret = vshBlockJobInfo(ctl, dom, path, raw, bytes);
> +
>   cleanup:
>      if (dom)
>          virDomainFree(dom);
> 




More information about the libvir-list mailing list