]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: add VIR_DOMAIN_UNDEFINE_KEEP_NVRAM support
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Fri, 27 May 2016 08:05:15 +0000 (11:05 +0300)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 13 Sep 2016 07:31:50 +0000 (09:31 +0200)
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
src/qemu/qemu_driver.c

index d044a8c822d9c600782927ebbe18fc9cb999642a..12b84c4f8711d500c62dba451846694ebc761147 100644 (file)
@@ -7327,7 +7327,15 @@ qemuDomainUndefineFlags(virDomainPtr dom,
 
     virCheckFlags(VIR_DOMAIN_UNDEFINE_MANAGED_SAVE |
                   VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA |
-                  VIR_DOMAIN_UNDEFINE_NVRAM, -1);
+                  VIR_DOMAIN_UNDEFINE_NVRAM |
+                  VIR_DOMAIN_UNDEFINE_KEEP_NVRAM, -1);
+
+    if ((flags & VIR_DOMAIN_UNDEFINE_NVRAM) &&
+        (flags & VIR_DOMAIN_UNDEFINE_KEEP_NVRAM)) {
+        virReportError(VIR_ERR_OPERATION_INVALID,
+                       "%s", _("cannot both keep and delete nvram"));
+        return -1;
+    }
 
     if (!(vm = qemuDomObjFromDomain(dom)))
         return -1;
@@ -7379,18 +7387,18 @@ qemuDomainUndefineFlags(virDomainPtr dom,
     if (!virDomainObjIsActive(vm) &&
         vm->def->os.loader && vm->def->os.loader->nvram &&
         virFileExists(vm->def->os.loader->nvram)) {
-        if (!(flags & VIR_DOMAIN_UNDEFINE_NVRAM)) {
+        if ((flags & VIR_DOMAIN_UNDEFINE_NVRAM)) {
+            if (unlink(vm->def->os.loader->nvram) < 0) {
+                virReportSystemError(errno,
+                                     _("failed to remove nvram: %s"),
+                                     vm->def->os.loader->nvram);
+                goto cleanup;
+            }
+        } else if (!(flags & VIR_DOMAIN_UNDEFINE_KEEP_NVRAM)) {
             virReportError(VIR_ERR_OPERATION_INVALID, "%s",
                            _("cannot delete inactive domain with nvram"));
             goto cleanup;
         }
-
-        if (unlink(vm->def->os.loader->nvram) < 0) {
-            virReportSystemError(errno,
-                                 _("failed to remove nvram: %s"),
-                                 vm->def->os.loader->nvram);
-            goto cleanup;
-        }
     }
 
     if (virDomainDeleteConfig(cfg->configDir, cfg->autostartDir, vm) < 0)