From 714080791778e3dfbd484ccb3953bffd820b8ba9 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Wed, 6 Jan 2016 17:35:04 +0100 Subject: [PATCH] qemu: Don't bother user with libvirt-internal paths If user defines a virtio channel with UNIX socket backend and doesn't care about the path for the socket (e.g. qemu-agent channel), we still generate it into the persistent XML. Moreover when then user renames the domain, due to its persistent socket path saved into the per-domain directory, it will not start. So let's forget about old generated paths and also stop putting them into the persistent definition. https://bugzilla.redhat.com/show_bug.cgi?id=1278068 Signed-off-by: Martin Kletzander --- src/qemu/qemu_command.c | 17 +++++++++++++++ src/qemu/qemu_domain.c | 21 ++++++++++--------- .../qemuxml2argv-channel-virtio-unix.args | 5 ++++- .../qemuxml2argv-channel-virtio-unix.xml | 4 ++++ 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 66ca11152a..1f0593526b 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10510,6 +10510,23 @@ qemuBuildCommandLine(virConnectPtr conn, goto error; } + /* + * TODO: Refactor so that we generate this (and onther + * things) somewhere else then where we are building the + * command line. + */ + if (channel->source.type == VIR_DOMAIN_CHR_TYPE_UNIX && + !channel->source.data.nix.path) { + if (virAsprintf(&channel->source.data.nix.path, + "%s/domain-%s/%s", + cfg->channelTargetDir, def->name, + channel->target.name ? channel->target.name + : "unknown.sock") < 0) + goto error; + + channel->source.data.nix.listen = true; + } + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC) && channel->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { /* spicevmc was originally introduced via a -device diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index bb8d47f929..73fc79dab5 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1329,20 +1329,21 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, ARCH_IS_S390(def->os.arch)) dev->data.controller->model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; - /* auto generate unix socket path */ + /* clear auto generated unix socket path */ if (dev->type == VIR_DOMAIN_DEVICE_CHR && dev->data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && dev->data.chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO && dev->data.chr->source.type == VIR_DOMAIN_CHR_TYPE_UNIX && - !dev->data.chr->source.data.nix.path) { - if (virAsprintf(&dev->data.chr->source.data.nix.path, - "%s/domain-%s/%s", - cfg->channelTargetDir, def->name, - dev->data.chr->target.name ? dev->data.chr->target.name - : "unknown.sock") < 0) - goto cleanup; - - dev->data.chr->source.data.nix.listen = true; + dev->data.chr->source.data.nix.path && + STRPREFIX(dev->data.chr->source.data.nix.path, cfg->channelTargetDir)) { + /* + * If the address is generated by us (starts with our + * channel dir), we should not keep it in the persistent + * XML. If libvirt is the one who generated it, users + * shouldn't care about that.  If they do, they are + * supposed to set it themselves. + */ + VIR_FREE(dev->data.chr->source.data.nix.path); } /* forbid capabilities mode hostdev in this kind of hypervisor */ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args index 94375b85df..6a0b1f3736 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args @@ -33,4 +33,7 @@ nowait \ id=channel1 \ -chardev socket,id=charchannel2,path=/tmp/domain-QEMUGuest1/ble,server,nowait \ -device virtserialport,bus=virtio-serial0.0,nr=3,chardev=charchannel2,\ -id=channel2,name=ble +id=channel2,name=ble \ +-chardev socket,id=charchannel3,path=/tmp/domain-QEMUGuest1/fdsa,server,nowait \ +-device virtserialport,bus=virtio-serial0.0,nr=4,chardev=charchannel3,\ +id=channel3,name=fdsa diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.xml b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.xml index 7fac943389..405dff8389 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.xml @@ -32,6 +32,10 @@ + + + + -- 2.39.5