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
