[libvirt] [PATCH 4/5] qemu: save image: Split out checks done only when editing the save img

Jiri Denemark jdenemar at redhat.com
Mon Sep 22 13:41:20 UTC 2014


On Wed, Sep 17, 2014 at 17:18:38 +0200, Peter Krempa wrote:
> Move them to the single corresponding function rather than having them
> in the common chunk of code.
> ---
>  src/qemu/qemu_driver.c | 76 +++++++++++++++++++++++++++-----------------------
>  1 file changed, 41 insertions(+), 35 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 0151fd2..1d82e93 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
...
> @@ -5477,18 +5489,6 @@ qemuDomainSaveImageOpen(virQEMUDriverPtr driver,
>          goto error;
>      }
> 
> -    if (edit && STREQ(xml, xmlin) &&
> -        (state < 0 || state == header.was_running)) {
> -        VIR_FREE(xml);
> -        if (VIR_CLOSE(fd) < 0) {
> -            virReportSystemError(errno, _("cannot close file: %s"), path);
> -            goto error;
> -        }
> -        return -2;
> -    }
> -    if (state >= 0)
> -        header.was_running = state;
> -
>      /* Create a domain from this XML */
>      if (!(def = virDomainDefParseString(xml, caps, driver->xmlopt,
>                                          QEMU_EXPECTED_VIRT_TYPES,
...
> @@ -5763,22 +5762,30 @@ qemuDomainSaveImageDefineXML(virConnectPtr conn, const char *path,
>      else if (flags & VIR_DOMAIN_SAVE_PAUSED)
>          state = 0;
> 
> -    fd = qemuDomainSaveImageOpen(driver, path, &def, &header, NULL,
> -                                 false, NULL, dxml, state, true, false);
> +    fd = qemuDomainSaveImageOpen(driver, path, &def, &header, &xml,
> +                                 false, NULL, true, false);
> 
> -    if (fd < 0) {
> -        /* Check for special case of no change needed.  */
> -        if (fd == -2)
> -            ret = 0;
> +    if (fd < 0)
>          goto cleanup;
> -    }
> 
>      if (virDomainSaveImageDefineXMLEnsureACL(conn, def) < 0)
>          goto cleanup;
> 
> +    if (STREQ(xml, dxml) &&
> +        (state < 0 || state == header.was_running)) {
> +        /* no change to the XML */
> +        ret = 0;
> +        goto cleanup;
> +    }
> +
> +    if (state > 0)
> +        header.was_running = state;

I believe the condition should be state >= 0.

> +
>      if (!(newdef = qemuDomainSaveImageUpdateDef(driver, def, dxml)))
>          goto cleanup;
> 
> +    VIR_FREE(xml);
> +
>      xml = qemuDomainDefFormatXML(driver, newdef,
>                                   VIR_DOMAIN_XML_INACTIVE |
>                                   VIR_DOMAIN_XML_SECURE |
...

ACK

Jirka




More information about the libvir-list mailing list