From 8b3fc29cdc829d0808c54cfa0936991a74f06aaf Mon Sep 17 00:00:00 2001 Message-Id: <8b3fc29cdc829d0808c54cfa0936991a74f06aaf@dist-git> From: Peter Krempa Date: Wed, 1 Oct 2014 17:41:58 -0600 Subject: [PATCH] qemu: blockcopy: Don't remove existing disk mirror info RHEL 7.0.z: https://bugzilla.redhat.com/show_bug.cgi?id=1149078 RHEL 7.1: https://bugzilla.redhat.com/show_bug.cgi?id=1113751 When creating a new disk mirror the new struct is stored in a separate variable until everything went well. The removed hunk would actually remove existing mirror information for example when the api would be run if a mirror still exists. (cherry picked from commit 02b364e186d487f54ed410c01af042f23e812d42) This fixes a regression introduced in commit ff5f30b. Signed-off-by: Eric Blake Conflicts: src/qemu/qemu_driver.c - no refactoring of commits 7b7bf001, 4f20226 Signed-off-by: Jiri Denemark --- src/qemu/qemu_driver.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ebdbfd7..ea87d50 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -15037,6 +15037,7 @@ qemuDomainBlockCopy(virDomainObjPtr vm, struct stat st; bool need_unlink = false; char *mirror = NULL; + int mirrorFormat; virQEMUDriverConfigPtr cfg = NULL; /* Preliminaries: find the disk we are editing, sanity checks */ @@ -15124,10 +15125,10 @@ qemuDomainBlockCopy(virDomainObjPtr vm, goto endjob; VIR_FORCE_CLOSE(fd); if (!format) - disk->mirrorFormat = disk->format; + mirrorFormat = disk->format; } else if (format) { - disk->mirrorFormat = virStorageFileFormatTypeFromString(format); - if (disk->mirrorFormat <= 0) { + mirrorFormat = virStorageFileFormatTypeFromString(format); + if (mirrorFormat <= 0) { virReportError(VIR_ERR_INVALID_ARG, _("unrecognized format '%s'"), format); goto endjob; @@ -15137,11 +15138,11 @@ qemuDomainBlockCopy(virDomainObjPtr vm, * also passed the RAW flag (and format is non-NULL), or it is * safe for us to probe the format from the file that we will * be using. */ - disk->mirrorFormat = virStorageFileProbeFormat(dest, cfg->user, - cfg->group); + mirrorFormat = virStorageFileProbeFormat(dest, cfg->user, + cfg->group); } - if (!format && disk->mirrorFormat > 0) - format = virStorageFileFormatTypeToString(disk->mirrorFormat); + if (!format && mirrorFormat > 0) + format = virStorageFileFormatTypeToString(mirrorFormat); if (VIR_STRDUP(mirror, dest) < 0) goto endjob; @@ -15167,13 +15168,12 @@ qemuDomainBlockCopy(virDomainObjPtr vm, /* Update vm in place to match changes. */ need_unlink = false; disk->mirror = mirror; + disk->mirrorFormat = mirrorFormat; mirror = NULL; endjob: if (need_unlink && unlink(dest)) VIR_WARN("unable to unlink just-created %s", dest); - if (ret < 0 && disk) - disk->mirrorFormat = VIR_STORAGE_FILE_NONE; VIR_FREE(mirror); if (qemuDomainObjEndJob(driver, vm) == 0) { vm = NULL; -- 2.2.0