[PATCH 2/3] qemu: process: Export qemuPrepareNVRAM for use in snapshot code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Export qemuPrepareNVRAM so that it doesn't require the VM object. The
snapshot code needs in the corner case of creating a snapshot of a
freshly defined VM ensure that the nvram image exists in order to
snapshot it.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/qemu/qemu_process.c | 26 ++++++++++++++------------
 src/qemu/qemu_process.h |  4 ++++
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 34a755a49a..4948801ca1 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -4608,10 +4608,9 @@ qemuPrepareNVRAMHelper(int dstFD,


 static int
-qemuPrepareNVRAMBlock(virDomainObj *vm,
+qemuPrepareNVRAMBlock(virDomainLoaderDef *loader,
                       bool reset_nvram)
 {
-    virDomainLoaderDef *loader = vm->def->os.loader;
     g_autoptr(virCommand) qemuimg = NULL;
     const char *templateFormatStr = "raw";

@@ -4672,13 +4671,12 @@ qemuPrepareNVRAMBlock(virDomainObj *vm,


 static int
-qemuPrepareNVRAMFile(virDomainObj *vm,
+qemuPrepareNVRAMFile(virQEMUDriver *driver,
+                     virDomainLoaderDef *loader,
                      bool reset_nvram)
 {
-    qemuDomainObjPrivate *priv = vm->privateData;
-    g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(priv->driver);
+    g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
     VIR_AUTOCLOSE srcFD = -1;
-    virDomainLoaderDef *loader = vm->def->os.loader;
     struct qemuPrepareNVRAMHelperData data;

     if (virFileExists(loader->nvram->path) && !reset_nvram)
@@ -4720,21 +4718,24 @@ qemuPrepareNVRAMFile(virDomainObj *vm,
 }


-static int
-qemuPrepareNVRAM(virDomainObj *vm,
+int
+qemuPrepareNVRAM(virQEMUDriver *driver,
+                 virDomainDef *def,
                  bool reset_nvram)
 {
-    virDomainLoaderDef *loader = vm->def->os.loader;
+    virDomainLoaderDef *loader = def->os.loader;

     if (!loader || !loader->nvram)
         return 0;

+    VIR_DEBUG("nvram='%s'", NULLSTR(loader->nvram->path));
+
     switch (virStorageSourceGetActualType(loader->nvram)) {
     case VIR_STORAGE_TYPE_FILE:
-        return qemuPrepareNVRAMFile(vm, reset_nvram);
+        return qemuPrepareNVRAMFile(driver, loader, reset_nvram);

     case VIR_STORAGE_TYPE_BLOCK:
-        return qemuPrepareNVRAMBlock(vm, reset_nvram);
+        return qemuPrepareNVRAMBlock(loader, reset_nvram);

     case VIR_STORAGE_TYPE_DIR:
     case VIR_STORAGE_TYPE_NETWORK:
@@ -7399,7 +7400,8 @@ qemuProcessPrepareHost(virQEMUDriver *driver,
         qemuProcessMakeDir(driver, vm, priv->channelTargetDir) < 0)
         return -1;

-    if (qemuPrepareNVRAM(vm, !!(flags & VIR_QEMU_PROCESS_START_RESET_NVRAM)) < 0)
+    if (qemuPrepareNVRAM(driver, vm->def,
+                         !!(flags & VIR_QEMU_PROCESS_START_RESET_NVRAM)) < 0)
         return -1;

     if (vm->def->vsock) {
diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
index 12781673c5..fee00ce53b 100644
--- a/src/qemu/qemu_process.h
+++ b/src/qemu/qemu_process.h
@@ -258,3 +258,7 @@ int qemuProcessSetupEmulator(virDomainObj *vm);

 void qemuProcessHandleNbdkitExit(qemuNbdkitProcess *nbdkit,
                                  virDomainObj *vm);
+
+int qemuPrepareNVRAM(virQEMUDriver *driver,
+                     virDomainDef *def,
+                     bool reset_nvram);
-- 
2.48.1




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux