Nothing that could happen during networkNotifyActualDevice() could
justify unceremoniously killing the qemu process, but that's what we
were doing.
In particular, new code added in commit
85bcc022 (first appearred in
libvirt-3.2.0) attempts to reattach tap devices to their assigned
bridge devices when libvirtd restarts (to make it easier to recover
from a restart of a libvirt network). But if the network has been
stopped and *not* restarted, the bridge device won't exist and
networkNotifyActualDevice() will fail.
This patch changes networkNotifyActualDevice() and
qemuProcessNotifyNets() to return void, so that qemuProcessReconnect()
will soldier on regardless of what happens (any errors will still be
logged though).
Partially resolves: https://bugzilla.redhat.com/
1442700
* order, or re-attach the interface's tap device to the network's
* bridge.
*
- * Returns 0 on success, -1 on failure.
+ * No return value (but does log any failures)
*/
-int
+void
networkNotifyActualDevice(virDomainDefPtr dom,
virDomainNetDefPtr iface)
{
virNetworkDefPtr netdef;
virNetworkForwardIfDefPtr dev = NULL;
size_t i;
- int ret = -1;
char *master = NULL;
if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK)
- return 0;
+ return;
network = virNetworkObjFindByName(driver->networks, iface->data.network.name);
if (!network) {
}
networkLogAllocation(netdef, actualType, dev, iface, true);
- ret = 0;
cleanup:
virNetworkObjEndAPI(&network);
VIR_FREE(master);
- return ret;
+ return;
error:
goto cleanup;
int networkAllocateActualDevice(virDomainDefPtr dom,
virDomainNetDefPtr iface)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
-int networkNotifyActualDevice(virDomainDefPtr dom,
- virDomainNetDefPtr iface)
+void networkNotifyActualDevice(virDomainDefPtr dom,
+ virDomainNetDefPtr iface)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
int networkReleaseActualDevice(virDomainDefPtr dom,
virDomainNetDefPtr iface)
# define networkDnsmasqConfContents(network, pidfile, configstr, \
dctx, caps) 0
-static inline int
+static inline void
networkNotifyActualDevice(virDomainDefPtr dom ATTRIBUTE_UNUSED,
virDomainNetDefPtr iface ATTRIBUTE_UNUSED)
{
- return 0;
}
static inline int
-static int
+static void
qemuProcessNotifyNets(virDomainDefPtr def)
{
size_t i;
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT)
ignore_value(virNetDevMacVLanReserveName(net->ifname, false));
- if (networkNotifyActualDevice(def, net) < 0)
- return -1;
+ networkNotifyActualDevice(def, net);
}
- return 0;
}
static int
if (qemuSecurityReserveLabel(driver->securityManager, obj->def, obj->pid) < 0)
goto error;
- if (qemuProcessNotifyNets(obj->def) < 0)
- goto error;
+ qemuProcessNotifyNets(obj->def);
if (qemuProcessFiltersInstantiate(obj->def))
goto error;