]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: simplify monitor fd error handling
authorEric Blake <eblake@redhat.com>
Wed, 16 Mar 2011 01:38:06 +0000 (19:38 -0600)
committerEric Blake <eblake@redhat.com>
Mon, 21 Mar 2011 16:47:48 +0000 (10:47 -0600)
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.

src/qemu/qemu_hotplug.c
src/qemu/qemu_monitor.c

index e1d9d29865a5eff330a0b26551a812460e161401..acc342e6d0d9598218729095e6c1517968e055a0 100644 (file)
@@ -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)
index dc0859408ca7de7685f45664056173230bfa05a4..c03ae513fdec41a2d59f81aa5dbd63a49f1e56cf 100644 (file)
@@ -1777,6 +1777,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