Move all all driver directory creation and permission handling from qemuStateInitialize to its own function. This is just code movement Signed-off-by: Cole Robinson <crobinso@redhat.com> --- src/qemu/qemu_driver.c | 299 ++++++++++++++++++++++------------------- 1 file changed, 158 insertions(+), 141 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 861795724a..b9f5e976b2 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -518,68 +518,11 @@ qemuDomainFindMaxID(virDomainObj *vm, } -/** - * qemuStateInitialize: - * - * Initialization function for the QEMU daemon - */ -static virDrvStateInitResult -qemuStateInitialize(bool privileged, - const char *root, - bool monolithic G_GNUC_UNUSED, - virStateInhibitCallback callback, - void *opaque) +static int +qemuStateInitializeDirs(bool privileged, + virQEMUDriverConfig *cfg) { - g_autofree char *driverConf = NULL; - virQEMUDriverConfig *cfg; - uid_t run_uid = -1; - gid_t run_gid = -1; - size_t i; - const char *defsecmodel = NULL; - g_autoptr(virIdentity) identity = virIdentityGetCurrent(); - virDomainDriverAutoStartConfig autostartCfg; - - qemu_driver = g_new0(virQEMUDriver, 1); - - qemu_driver->lockFD = -1; - - if (virMutexInit(&qemu_driver->lock) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot initialize mutex")); - VIR_FREE(qemu_driver); - return VIR_DRV_STATE_INIT_ERROR; - } - - qemu_driver->privileged = privileged; - qemu_driver->hostarch = virArchFromHost(); - if (root != NULL) - qemu_driver->embeddedRoot = g_strdup(root); - - if (!(qemu_driver->domains = virDomainObjListNew())) - goto error; - - /* Init domain events */ - qemu_driver->domainEventState = virObjectEventStateNew(); - if (!qemu_driver->domainEventState) - goto error; - - /* read the host sysinfo */ - if (privileged) - qemu_driver->hostsysinfo = virSysinfoRead(); - - if (!(qemu_driver->config = cfg = virQEMUDriverConfigNew(privileged, root))) - goto error; - - driverConf = g_strdup_printf("%s/qemu.conf", cfg->configBaseDir); - - if (virQEMUDriverConfigLoadFile(cfg, driverConf, privileged) < 0) - goto error; - - if (virQEMUDriverConfigValidate(cfg) < 0) - goto error; - - if (virQEMUDriverConfigSetDefaults(cfg) < 0) - goto error; + int ret = -1; if (g_mkdir_with_parents(cfg->stateDir, 0777) < 0) { virReportSystemError(errno, _("Failed to create state dir %1$s"), @@ -659,81 +602,6 @@ qemuStateInitialize(bool privileged, goto error; } - qemu_driver->inhibitor = virInhibitorNew( - VIR_INHIBITOR_WHAT_SHUTDOWN, - _("Libvirt QEMU"), - _("QEMU/KVM virtual machines are running"), - VIR_INHIBITOR_MODE_DELAY, - callback, - opaque); - - if ((qemu_driver->lockFD = - virPidFileAcquire(cfg->stateDir, "driver", getpid())) < 0) - goto error; - - if (!(qemu_driver->lockManager = - virLockManagerPluginNew(cfg->lockManagerName ? - cfg->lockManagerName : "nop", - "qemu", - cfg->configBaseDir, - 0))) - goto error; - - if (cfg->macFilter) { - if (!(qemu_driver->ebtables = ebtablesContextNew("qemu"))) { - virReportSystemError(errno, - _("failed to enable mac filter in '%1$s'"), - __FILE__); - goto error; - } - - if (ebtablesAddForwardPolicyReject(qemu_driver->ebtables) < 0) - goto error; - } - - /* Allocate bitmap for remote display port reservations. We cannot - * do this before the config is loaded properly, since the port - * numbers are configurable now */ - if ((qemu_driver->remotePorts = - virPortAllocatorRangeNew(_("display"), - cfg->remotePortMin, - cfg->remotePortMax)) == NULL) - goto error; - - if ((qemu_driver->webSocketPorts = - virPortAllocatorRangeNew(_("webSocket"), - cfg->webSocketPortMin, - cfg->webSocketPortMax)) == NULL) - goto error; - - if ((qemu_driver->rdpPorts = - virPortAllocatorRangeNew(_("rdp"), - cfg->rdpPortMin, - cfg->rdpPortMax)) == NULL) - goto error; - - - if ((qemu_driver->migrationPorts = - virPortAllocatorRangeNew(_("migration"), - cfg->migrationPortMin, - cfg->migrationPortMax)) == NULL) - goto error; - - if ((qemu_driver->backupPorts = - virPortAllocatorRangeNew(_("backup"), - cfg->backupPortMin, - cfg->backupPortMax)) == NULL) - goto error; - - if (qemuSecurityInit(qemu_driver) < 0) - goto error; - - if (!(qemu_driver->hostdevMgr = virHostdevManagerGetDefault())) - goto error; - - if (qemuMigrationDstErrorInit(qemu_driver) < 0) - goto error; - if (privileged) { g_autofree char *channeldir = NULL; @@ -830,7 +698,161 @@ qemuStateInitialize(bool privileged, (int)cfg->group); goto error; } + } + if (privileged && + virFileUpdatePerm(cfg->memoryBackingDir, + 0, S_IXGRP | S_IXOTH) < 0) + goto error; + + ret = 0; +error: + return ret; +} + + +/** + * qemuStateInitialize: + * + * Initialization function for the QEMU daemon + */ +static virDrvStateInitResult +qemuStateInitialize(bool privileged, + const char *root, + bool monolithic G_GNUC_UNUSED, + virStateInhibitCallback callback, + void *opaque) +{ + g_autofree char *driverConf = NULL; + virQEMUDriverConfig *cfg; + uid_t run_uid = -1; + gid_t run_gid = -1; + size_t i; + const char *defsecmodel = NULL; + g_autoptr(virIdentity) identity = virIdentityGetCurrent(); + virDomainDriverAutoStartConfig autostartCfg; + + qemu_driver = g_new0(virQEMUDriver, 1); + + qemu_driver->lockFD = -1; + + if (virMutexInit(&qemu_driver->lock) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("cannot initialize mutex")); + VIR_FREE(qemu_driver); + return VIR_DRV_STATE_INIT_ERROR; + } + + qemu_driver->privileged = privileged; + qemu_driver->hostarch = virArchFromHost(); + if (root != NULL) + qemu_driver->embeddedRoot = g_strdup(root); + + if (!(qemu_driver->domains = virDomainObjListNew())) + goto error; + + /* Init domain events */ + qemu_driver->domainEventState = virObjectEventStateNew(); + if (!qemu_driver->domainEventState) + goto error; + + /* read the host sysinfo */ + if (privileged) + qemu_driver->hostsysinfo = virSysinfoRead(); + + if (!(qemu_driver->config = cfg = virQEMUDriverConfigNew(privileged, root))) + goto error; + + driverConf = g_strdup_printf("%s/qemu.conf", cfg->configBaseDir); + + if (virQEMUDriverConfigLoadFile(cfg, driverConf, privileged) < 0) + goto error; + + if (virQEMUDriverConfigValidate(cfg) < 0) + goto error; + + if (virQEMUDriverConfigSetDefaults(cfg) < 0) + goto error; + + if (qemuStateInitializeDirs(privileged, cfg) < 0) + goto error; + + qemu_driver->inhibitor = virInhibitorNew( + VIR_INHIBITOR_WHAT_SHUTDOWN, + _("Libvirt QEMU"), + _("QEMU/KVM virtual machines are running"), + VIR_INHIBITOR_MODE_DELAY, + callback, + opaque); + + if ((qemu_driver->lockFD = + virPidFileAcquire(cfg->stateDir, "driver", getpid())) < 0) + goto error; + + if (!(qemu_driver->lockManager = + virLockManagerPluginNew(cfg->lockManagerName ? + cfg->lockManagerName : "nop", + "qemu", + cfg->configBaseDir, + 0))) + goto error; + + if (cfg->macFilter) { + if (!(qemu_driver->ebtables = ebtablesContextNew("qemu"))) { + virReportSystemError(errno, + _("failed to enable mac filter in '%1$s'"), + __FILE__); + goto error; + } + + if (ebtablesAddForwardPolicyReject(qemu_driver->ebtables) < 0) + goto error; + } + + /* Allocate bitmap for remote display port reservations. We cannot + * do this before the config is loaded properly, since the port + * numbers are configurable now */ + if ((qemu_driver->remotePorts = + virPortAllocatorRangeNew(_("display"), + cfg->remotePortMin, + cfg->remotePortMax)) == NULL) + goto error; + + if ((qemu_driver->webSocketPorts = + virPortAllocatorRangeNew(_("webSocket"), + cfg->webSocketPortMin, + cfg->webSocketPortMax)) == NULL) + goto error; + + if ((qemu_driver->rdpPorts = + virPortAllocatorRangeNew(_("rdp"), + cfg->rdpPortMin, + cfg->rdpPortMax)) == NULL) + goto error; + + + if ((qemu_driver->migrationPorts = + virPortAllocatorRangeNew(_("migration"), + cfg->migrationPortMin, + cfg->migrationPortMax)) == NULL) + goto error; + + if ((qemu_driver->backupPorts = + virPortAllocatorRangeNew(_("backup"), + cfg->backupPortMin, + cfg->backupPortMax)) == NULL) + goto error; + + if (qemuSecurityInit(qemu_driver) < 0) + goto error; + + if (!(qemu_driver->hostdevMgr = virHostdevManagerGetDefault())) + goto error; + + if (qemuMigrationDstErrorInit(qemu_driver) < 0) + goto error; + + if (privileged) { run_uid = cfg->user; run_gid = cfg->group; } @@ -859,11 +881,6 @@ qemuStateInitialize(bool privileged, goto error; } - if (privileged && - virFileUpdatePerm(cfg->memoryBackingDir, - 0, S_IXGRP | S_IXOTH) < 0) - goto error; - /* Get all the running persistent or transient configs first */ if (virDomainObjListLoadAllConfigs(qemu_driver->domains, cfg->stateDir, -- 2.53.0