[PATCH] qemu: pre-create the dbus directory in qemuStateInitialize
Bihong Yu
yubihong at huawei.com
Fri Jul 17 01:46:08 UTC 2020
Can anyone help me review the code?
On 2020/7/14 15:53, Bihong Yu wrote:
>>From 187323ce736dcd9b1a177d552630b0c6859a4798 Mon Sep 17 00:00:00 2001
> From: Bihong Yu <yubihong at huawei.com>
> Date: Tue, 14 Jul 2020 15:44:05 +0800
> Subject: [PATCH] qemu: pre-create the dbus directory in qemuStateInitialize
>
> 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 at huawei.com>
> ---
> src/qemu/qemu_dbus.c | 4 +---
> src/qemu/qemu_dbus.h | 2 +-
> src/qemu/qemu_driver.c | 4 ++++
> src/qemu/qemu_process.c | 3 ---
> 4 files changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/src/qemu/qemu_dbus.c b/src/qemu/qemu_dbus.c
> index 51f6c94..0e0306a 100644
> --- a/src/qemu/qemu_dbus.c
> +++ b/src/qemu/qemu_dbus.c
> @@ -34,10 +34,8 @@ VIR_LOG_INIT("qemu.dbus");
>
>
> int
> -qemuDBusPrepareHost(virQEMUDriverPtr driver)
> +qemuDBusPreparePath(virQEMUDriverConfigPtr cfg)
> {
> - g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
> -
> return virDirCreate(cfg->dbusStateDir, 0770, cfg->user, cfg->group,
> VIR_DIR_CREATE_ALLOW_EXIST);
> }
> diff --git a/src/qemu/qemu_dbus.h b/src/qemu/qemu_dbus.h
> index 474eb10..6ce9f7b 100644
> --- a/src/qemu/qemu_dbus.h
> +++ b/src/qemu/qemu_dbus.h
> @@ -21,7 +21,7 @@
> #include "qemu_conf.h"
> #include "qemu_domain.h"
>
> -int qemuDBusPrepareHost(virQEMUDriverPtr driver);
> +int qemuDBusPreparePath(virQEMUDriverConfigPtr cfg);
>
> char *qemuDBusGetAddress(virQEMUDriverPtr driver,
> virDomainObjPtr vm);
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index d185666..52b68c9 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -50,6 +50,7 @@
> #include "qemu_security.h"
> #include "qemu_checkpoint.h"
> #include "qemu_backup.h"
> +#include "qemu_dbus.h"
>
> #include "virerror.h"
> #include "virlog.h"
> @@ -790,6 +791,9 @@ qemuStateInitialize(bool privileged,
> cfg->migrationPortMax)) == NULL)
> goto error;
>
> + if (qemuDBusPreparePath(cfg) < 0)
> + goto error;
> +
> if (qemuSecurityInit(qemu_driver) < 0)
> goto error;
>
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index eba14ed..46620ca 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -6449,9 +6449,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;
>
More information about the libvir-list
mailing list