[libvirt] [PATCHv2 1/3] qemu: simplify monitor fd error handling
Daniel P. Berrange
berrange at redhat.com
Mon Mar 21 16:29:35 UTC 2011
On Tue, Mar 15, 2011 at 08:27:16PM -0600, Eric Blake wrote:
> qemu_monitor was already returning -1 and setting errno to EINVAL
> on any attempt to send an fd without a unix socket, but this was
> a silent failure in the case of qemuDomainAttachHostPciDevice.
> Meanwhile, qemuDomainAttachNetDevice was doing some sanity checking
> for a better error message; it's better to consolidate that to a
> central point in the API.
>
> * src/qemu/qemu_hotplug.c (qemuDomainAttachNetDevice): Move sanity
> checking...
> * src/qemu/qemu_monitor.c (qemuMonitorSendFileHandle): ...into
> central location.
> Suggested by Chris Wright.
> ---
>
> v2: new patch
>
> Note that this changes the behavior of qemuDomainAttachHostPciDevice
> even though that function is not directly patched, but hopefully for
> the better.
>
> src/qemu/qemu_hotplug.c | 16 ----------------
> src/qemu/qemu_monitor.c | 13 +++++++++++++
> 2 files changed, 13 insertions(+), 16 deletions(-)
>
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index e4ba526..20d94e4 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -568,28 +568,12 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
>
> if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
> net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
> - if (priv->monConfig->type != VIR_DOMAIN_CHR_TYPE_UNIX) {
> - qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("network device type '%s' cannot be attached: "
> - "qemu is not using a unix socket monitor"),
> - virDomainNetTypeToString(net->type));
> - return -1;
> - }
> -
> if ((tapfd = qemuNetworkIfaceConnect(vm->def, conn, driver, net,
> qemuCaps)) < 0)
> return -1;
> if (qemuOpenVhostNet(vm->def, net, qemuCaps, &vhostfd) < 0)
> goto cleanup;
> } else if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
> - if (priv->monConfig->type != VIR_DOMAIN_CHR_TYPE_UNIX) {
> - qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("network device type '%s' cannot be attached: "
> - "qemu is not using a unix socket monitor"),
> - virDomainNetTypeToString(net->type));
> - return -1;
> - }
> -
> if ((tapfd = qemuPhysIfaceConnect(vm->def, conn, driver, net,
> qemuCaps,
> VIR_VM_OP_CREATE)) < 0)
> diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
> index da38096..fb875fc 100644
> --- a/src/qemu/qemu_monitor.c
> +++ b/src/qemu/qemu_monitor.c
> @@ -1776,6 +1776,19 @@ int qemuMonitorSendFileHandle(qemuMonitorPtr mon,
> return -1;
> }
>
> + if (fd < 0) {
> + qemuReportError(VIR_ERR_INVALID_ARG, "%s",
> + _("fd must be valid"));
> + return -1;
> + }
> +
> + if (!mon->hasSendFD) {
> + qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("qemu is not using a unix socket monitor, "
> + "cannot send fd %s"), fdname);
> + return -1;
> + }
> +
> if (mon->json)
> ret = qemuMonitorJSONSendFileHandle(mon, fdname, fd);
> else
ACK
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list