The virDomainFSInfoFormat() and qemuAgentFSInfoToPublic() function
implementations are not driver dependent and can be shared across
drivers, so move them to a common place to avoid code duplication.

Also, rename virDomainFSInfoFormat() to qemuAgentFSInfoFormat() to follow
the naming scheme in qemu_agent.c.

Signed-off-by: Roman Bogorodskiy <[email protected]>
---
 src/hypervisor/qemu_agent.c | 70 ++++++++++++++++++++++++++++++++++++
 src/hypervisor/qemu_agent.h |  5 +++
 src/libvirt_private.syms    |  1 +
 src/qemu/qemu_driver.c      | 72 +------------------------------------
 4 files changed, 77 insertions(+), 71 deletions(-)

diff --git a/src/hypervisor/qemu_agent.c b/src/hypervisor/qemu_agent.c
index 70f0cde5dd..e549947fbf 100644
--- a/src/hypervisor/qemu_agent.c
+++ b/src/hypervisor/qemu_agent.c
@@ -2611,3 +2611,73 @@ qemuAgentGetLoadAvg(qemuAgent *agent,
 
     return 0;
 }
+
+static virDomainFSInfoPtr
+qemuAgentFSInfoToPublic(qemuAgentFSInfo *agent,
+                        virDomainDef *vmdef)
+{
+    virDomainFSInfoPtr ret = NULL;
+    size_t i;
+
+    ret = g_new0(virDomainFSInfo, 1);
+
+    ret->mountpoint = g_strdup(agent->mountpoint);
+    ret->name = g_strdup(agent->name);
+    ret->fstype = g_strdup(agent->fstype);
+
+    if (agent->disks)
+        ret->devAlias = g_new0(char *, agent->ndisks);
+
+    for (i = 0; i < agent->ndisks; i++) {
+        qemuAgentDiskAddress *agentdisk = agent->disks[i];
+        virDomainDiskDef *diskDef;
+
+        diskDef = virDomainDiskByAddress(vmdef,
+                                         &agentdisk->pci_controller,
+                                         agentdisk->ccw_addr,
+                                         agentdisk->bus,
+                                         agentdisk->target,
+                                         agentdisk->unit);
+        if (diskDef != NULL)
+            ret->devAlias[ret->ndevAlias++] = g_strdup(diskDef->dst);
+        else
+            VIR_DEBUG("Missing target name for '%s'.", ret->mountpoint);
+    }
+
+    return ret;
+}
+
+/* Returns: 0 on success
+ *          -1 otherwise
+ */
+int
+qemuAgentFSInfoFormat(qemuAgentFSInfo **agentinfo,
+                      int nagentinfo,
+                      virDomainDef *vmdef,
+                      virDomainFSInfoPtr **info)
+{
+    int ret = -1;
+    virDomainFSInfoPtr *info_ret = NULL;
+    size_t i;
+
+    info_ret = g_new0(virDomainFSInfoPtr, nagentinfo);
+
+    for (i = 0; i < nagentinfo; i++) {
+        if (!(info_ret[i] = qemuAgentFSInfoToPublic(agentinfo[i], vmdef)))
+            goto cleanup;
+    }
+
+    *info = g_steal_pointer(&info_ret);
+    ret = nagentinfo;
+
+ cleanup:
+    if (info_ret) {
+        for (i = 0; i < nagentinfo; i++) {
+            /* if there was an error, free any memory we've allocated for the
+             * return value */
+            virDomainFSInfoFree(info_ret[i]);
+        }
+        g_free(info_ret);
+    }
+    return ret;
+}
diff --git a/src/hypervisor/qemu_agent.h b/src/hypervisor/qemu_agent.h
index 9117d3743c..3dbc3baec1 100644
--- a/src/hypervisor/qemu_agent.h
+++ b/src/hypervisor/qemu_agent.h
@@ -196,3 +196,8 @@ int qemuAgentGetLoadAvg(qemuAgent *agent,
                         double *load5m,
                         double *load15m,
                         bool report_unsupported);
+
+int qemuAgentFSInfoFormat(qemuAgentFSInfo **agentinfo,
+                          int nagentinfo,
+                          virDomainDef *vmdef,
+                          virDomainFSInfoPtr **info);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index a76da45fb9..0aad60fed7 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1714,6 +1714,7 @@ qemuAgentArbitraryCommand;
 qemuAgentClose;
 qemuAgentDiskInfoFree;
 qemuAgentFSFreeze;
+qemuAgentFSInfoFormat;
 qemuAgentFSInfoFree;
 qemuAgentFSThaw;
 qemuAgentFSTrim;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index bcafacfb60..58b68a6e2b 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -18767,76 +18767,6 @@ qemuDomainGetFSInfoAgent(virDomainObj *vm,
     return ret;
 }
 
-static virDomainFSInfoPtr
-qemuAgentFSInfoToPublic(qemuAgentFSInfo *agent,
-                        virDomainDef *vmdef)
-{
-    virDomainFSInfoPtr ret = NULL;
-    size_t i;
-
-    ret = g_new0(virDomainFSInfo, 1);
-
-    ret->mountpoint = g_strdup(agent->mountpoint);
-    ret->name = g_strdup(agent->name);
-    ret->fstype = g_strdup(agent->fstype);
-
-    if (agent->disks)
-        ret->devAlias = g_new0(char *, agent->ndisks);
-
-    for (i = 0; i < agent->ndisks; i++) {
-        qemuAgentDiskAddress *agentdisk = agent->disks[i];
-        virDomainDiskDef *diskDef;
-
-        diskDef = virDomainDiskByAddress(vmdef,
-                                         &agentdisk->pci_controller,
-                                         agentdisk->ccw_addr,
-                                         agentdisk->bus,
-                                         agentdisk->target,
-                                         agentdisk->unit);
-        if (diskDef != NULL)
-            ret->devAlias[ret->ndevAlias++] = g_strdup(diskDef->dst);
-        else
-            VIR_DEBUG("Missing target name for '%s'.", ret->mountpoint);
-    }
-
-    return ret;
-}
-
-/* Returns: 0 on success
- *          -1 otherwise
- */
-static int
-virDomainFSInfoFormat(qemuAgentFSInfo **agentinfo,
-                      int nagentinfo,
-                      virDomainDef *vmdef,
-                      virDomainFSInfoPtr **info)
-{
-    int ret = -1;
-    virDomainFSInfoPtr *info_ret = NULL;
-    size_t i;
-
-    info_ret = g_new0(virDomainFSInfoPtr, nagentinfo);
-
-    for (i = 0; i < nagentinfo; i++) {
-        if (!(info_ret[i] = qemuAgentFSInfoToPublic(agentinfo[i], vmdef)))
-            goto cleanup;
-    }
-
-    *info = g_steal_pointer(&info_ret);
-    ret = nagentinfo;
-
- cleanup:
-    if (info_ret) {
-        for (i = 0; i < nagentinfo; i++) {
-            /* if there was an error, free any memory we've allocated for the
-             * return value */
-            virDomainFSInfoFree(info_ret[i]);
-        }
-        g_free(info_ret);
-    }
-    return ret;
-}
-
 static int
 qemuDomainGetFSInfo(virDomainPtr dom,
                     virDomainFSInfoPtr **info,
@@ -18864,7 +18794,7 @@ qemuDomainGetFSInfo(virDomainPtr dom,
     if (virDomainObjCheckActive(vm) < 0)
         goto endjob;
 
-    ret = virDomainFSInfoFormat(agentinfo, nfs, vm->def, info);
+    ret = qemuAgentFSInfoFormat(agentinfo, nfs, vm->def, info);
 
  endjob:
     virDomainObjEndJob(vm);
-- 
2.52.0

Reply via email to