]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: pre-create the dbus directory in qemuStateInitialize
authorBihong Yu <yubihong@huawei.com>
Tue, 14 Jul 2020 07:44:05 +0000 (15:44 +0800)
committerJán Tomko <jtomko@redhat.com>
Wed, 22 Jul 2020 07:40:15 +0000 (09:40 +0200)
There are races condiction to make '/run/libvirt/qemu/dbus' directory in
virDirCreateNoFork() while concurrent start VMs, and get "failed to create
directory '/run/libvirt/qemu/dbus': File exists" error message. pre-create the
dbus directory in qemuStateInitialize.

Signed-off-by: Bihong Yu <yubihong@huawei.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_dbus.c
src/qemu/qemu_dbus.h
src/qemu/qemu_driver.c
src/qemu/qemu_process.c

index 51f6c94e3ee9b89da83a44b33406c3cb6cfda3f4..81042876fe5222b6c23400819c2e0aa8d14162f3 100644 (file)
 VIR_LOG_INIT("qemu.dbus");
 
 
-int
-qemuDBusPrepareHost(virQEMUDriverPtr driver)
-{
-    g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-
-    return virDirCreate(cfg->dbusStateDir, 0770, cfg->user, cfg->group,
-                        VIR_DIR_CREATE_ALLOW_EXIST);
-}
-
-
 static char *
 qemuDBusCreatePidFilename(virQEMUDriverConfigPtr cfg,
                           const char *shortName)
index 474eb1058b70e158229555338aaf4d648e74e91d..3c2145a223aad282702375e766ac5328f865e1e7 100644 (file)
@@ -21,8 +21,6 @@
 #include "qemu_conf.h"
 #include "qemu_domain.h"
 
-int qemuDBusPrepareHost(virQEMUDriverPtr driver);
-
 char *qemuDBusGetAddress(virQEMUDriverPtr driver,
                          virDomainObjPtr vm);
 
index 8e81c30a93fc8e05f3938dbcc04ab92bf6e5551c..53980d4d78c6749e0086e9a0cad7130b420a444f 100644 (file)
@@ -743,6 +743,13 @@ qemuStateInitialize(bool privileged,
         goto error;
     }
 
+    if (virDirCreate(cfg->dbusStateDir, 0770, cfg->user, cfg->group,
+                     VIR_DIR_CREATE_ALLOW_EXIST) < 0) {
+        virReportSystemError(errno, _("Failed to create dbus state dir %s"),
+                             cfg->dbusStateDir);
+        goto error;
+    }
+
     if ((qemu_driver->lockFD =
          virPidFileAcquire(cfg->stateDir, "driver", false, getpid())) < 0)
         goto error;
index e8b15ee3cac3db28302a70661816cff3f1d05b4a..1006f41614c0564409d399282beaefdd716189d3 100644 (file)
@@ -6466,9 +6466,6 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver,
     qemuDomainObjPrivatePtr priv = vm->privateData;
     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
 
-    if (qemuDBusPrepareHost(driver) < 0)
-        return -1;
-
     if (qemuPrepareNVRAM(cfg, vm) < 0)
         return -1;