[libvirt] [PATCH v5 05/11] qemu_ns: Allow /dev/mapper/control for PR
John Ferlan
jferlan at redhat.com
Sun Apr 29 12:20:24 UTC 2018
On 04/23/2018 09:14 AM, Michal Privoznik wrote:
> 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 <mprivozn at redhat.com>
> ---
> 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 53827d5396..5ccdeb8e3a 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 {
> @@ -10207,6 +10208,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;
> +
This is from SetupAllDisks via qemuDomainBuildNamespace... Does it or
could it matter that more than one disk would be doing this? Thus having
multiple entries? Was too lazy to check.
> ret = 0;
> cleanup:
> VIR_FREE(dst);
> @@ -11218,6 +11224,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))
> @@ -11234,11 +11241,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;
> +
... similarly when we add/hotplug a disk we could be repeating that path.
If the duplication is OK or handled in some way that wasn't obvious,
Reviewed-by: John Ferlan <jferlan at redhat.com>
If you need to adjust the logic to handle this specially, then obviously
I'd ask to wait for that OK. I wonder if the @prDaemonRunning logic
added later on would suffice?
John
> if (qemuDomainNamespaceMknodPaths(vm, paths, npaths) < 0)
> goto cleanup;
>
> ret = 0;
> cleanup:
> + VIR_FREE(dmPath);
> VIR_FREE(paths);
> return ret;
> }
>
More information about the libvir-list
mailing list