[PATCH 3/5] qemuFileWrapperFDClose: move to qemu_domain.c

Peter Krempa pkrempa at redhat.com
Thu Aug 6 09:55:14 UTC 2020


Move the code to qemu_domain.c so that it can be reused in other parts
of the qemu driver. 'qemu_domain' was chosen as we check the domain
state after closing the wrapper.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_domain.c | 28 ++++++++++++++++++++++++++++
 src/qemu/qemu_domain.h |  4 ++++
 src/qemu/qemu_driver.c | 36 ++++--------------------------------
 3 files changed, 36 insertions(+), 32 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 670db6ebfb..e28f704dba 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -10721,3 +10721,31 @@ qemuDomainOpenFile(virQEMUDriverPtr driver,
     return virQEMUFileOpenAs(user, group, dynamicOwnership,
                              path, oflags, needUnlink);
 }
+
+
+int
+qemuDomainFileWrapperFDClose(virDomainObjPtr vm,
+                             virFileWrapperFdPtr fd)
+{
+    int ret;
+
+    /* virFileWrapperFd uses iohelper to write data onto disk.
+     * However, iohelper calls fdatasync() which may take ages to
+     * finish. Therefore, we shouldn't be waiting with the domain
+     * object locked. */
+
+    /* XXX Currently, this function is intended for *Save() only
+     * as restore needs some reworking before it's ready for
+     * this. */
+
+    virObjectUnlock(vm);
+    ret = virFileWrapperFdClose(fd);
+    virObjectLock(vm);
+    if (!virDomainObjIsActive(vm)) {
+        if (virGetLastErrorCode() == VIR_ERR_OK)
+            virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+                           _("domain is no longer running"));
+        ret = -1;
+    }
+    return ret;
+}
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index ef03702fa1..e4c22864dc 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -1024,3 +1024,7 @@ qemuDomainOpenFile(virQEMUDriverPtr driver,
                    const char *path,
                    int oflags,
                    bool *needUnlink);
+
+int
+qemuDomainFileWrapperFDClose(virDomainObjPtr vm,
+                             virFileWrapperFdPtr fd);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 0bc7eebe9a..8f61759f53 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -3022,34 +3022,6 @@ qemuCompressGetCommand(virQEMUSaveFormat compression)
 }


-static int
-qemuFileWrapperFDClose(virDomainObjPtr vm,
-                       virFileWrapperFdPtr fd)
-{
-    int ret;
-
-    /* virFileWrapperFd uses iohelper to write data onto disk.
-     * However, iohelper calls fdatasync() which may take ages to
-     * finish. Therefore, we shouldn't be waiting with the domain
-     * object locked. */
-
-    /* XXX Currently, this function is intended for *Save() only
-     * as restore needs some reworking before it's ready for
-     * this. */
-
-    virObjectUnlock(vm);
-    ret = virFileWrapperFdClose(fd);
-    virObjectLock(vm);
-    if (!virDomainObjIsActive(vm)) {
-        if (virGetLastErrorCode() == VIR_ERR_OK)
-            virReportError(VIR_ERR_OPERATION_FAILED, "%s",
-                           _("domain is no longer running"));
-        ret = -1;
-    }
-    return ret;
-}
-
-
 /* Helper function to execute a migration to file with a correct save header
  * the caller needs to make sure that the processors are stopped and do all other
  * actions besides saving memory */
@@ -3111,7 +3083,7 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,
         goto cleanup;
     }

-    if (qemuFileWrapperFDClose(vm, wrapperFd) < 0)
+    if (qemuDomainFileWrapperFDClose(vm, wrapperFd) < 0)
         goto cleanup;

     if ((fd = qemuDomainOpenFile(driver, vm, path, O_WRONLY, NULL)) < 0 ||
@@ -3122,7 +3094,7 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver,

  cleanup:
     VIR_FORCE_CLOSE(fd);
-    if (qemuFileWrapperFDClose(vm, wrapperFd) < 0)
+    if (qemuDomainFileWrapperFDClose(vm, wrapperFd) < 0)
         ret = -1;
     virFileWrapperFdFree(wrapperFd);

@@ -3703,14 +3675,14 @@ doCoreDump(virQEMUDriverPtr driver,
                              path);
         goto cleanup;
     }
-    if (qemuFileWrapperFDClose(vm, wrapperFd) < 0)
+    if (qemuDomainFileWrapperFDClose(vm, wrapperFd) < 0)
         goto cleanup;

     ret = 0;

  cleanup:
     VIR_FORCE_CLOSE(fd);
-    if (qemuFileWrapperFDClose(vm, wrapperFd) < 0)
+    if (qemuDomainFileWrapperFDClose(vm, wrapperFd) < 0)
         ret = -1;
     virFileWrapperFdFree(wrapperFd);
     if (ret != 0)
-- 
2.26.2




More information about the libvir-list mailing list