From 5bf89434ff9ff5ab00824e0e24aaf0fe2df1832c Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Mon, 9 Apr 2018 14:44:44 +0200 Subject: [PATCH] qemu_ns: Allow /dev/mapper/control for PR If qemu-pr-helper is compiled with multipath support the first thing it does is open /dev/mapper/control. Since we're going to be running it inside qemu namespace we need to create it there. Unfortunately, we don't know if it was compiled with or without multipath so we have to create it anyway. Signed-off-by: Michal Privoznik Reviewed-by: John Ferlan --- src/qemu/qemu_domain.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index f43b8602ae..d107bceb0e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -109,6 +109,7 @@ VIR_ENUM_IMPL(qemuDomainNamespace, QEMU_DOMAIN_NS_LAST, #define PROC_MOUNTS "/proc/mounts" #define DEVPREFIX "/dev/" #define DEV_VFIO "/dev/vfio/vfio" +#define DEVICE_MAPPER_CONTROL_PATH "/dev/mapper/control" struct _qemuDomainLogContext { @@ -10213,6 +10214,11 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, goto cleanup; } + /* qemu-pr-helper might require access to /dev/mapper/control. */ + if (virStoragePRDefIsEnabled(disk->src->pr) && + qemuDomainCreateDevice(DEVICE_MAPPER_CONTROL_PATH, data, true) < 0) + goto cleanup; + ret = 0; cleanup: VIR_FREE(dst); @@ -11224,6 +11230,7 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm, virStorageSourcePtr next; const char **paths = NULL; size_t npaths = 0; + char *dmPath = NULL; int ret = -1; if (!qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT)) @@ -11240,11 +11247,18 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm, goto cleanup; } + /* qemu-pr-helper might require access to /dev/mapper/control. */ + if (virStoragePRDefIsEnabled(src->pr) && + (VIR_STRDUP(dmPath, DEVICE_MAPPER_CONTROL_PATH) < 0 || + VIR_APPEND_ELEMENT_COPY(paths, npaths, dmPath) < 0)) + goto cleanup; + if (qemuDomainNamespaceMknodPaths(vm, paths, npaths) < 0) goto cleanup; ret = 0; cleanup: + VIR_FREE(dmPath); VIR_FREE(paths); return ret; } -- 2.47.2