When instantiating a filter, a VM may disappear and remove its tap
interfaces. Tolerate this case and don't report an error.
Signed-off-by: Stefan Berger <stefanb(a)linux.vnet.ibm.com>
---
src/nwfilter/nwfilter_gentech_driver.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
Index: libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c
===================================================================
--- libvirt-acl.orig/src/nwfilter/nwfilter_gentech_driver.c
+++ libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c
@@ -898,11 +898,18 @@ _virNWFilterInstantiateFilter(virConnect
int ifindex;
int rc;
- if (ifaceGetIndex(true, net->ifname, &ifindex) < 0)
- return 1;
-
virNWFilterLockFilterUpdates();
+ /* after grabbing the filter update lock check for the interface; if
+ it's not there anymore its filters will be or are being removed
+ (while holding the lock) and we don't want to build new ones */
+ if (ifaceGetIndex(false, net->ifname, &ifindex) < 0) {
+ /* interfaces / VMs can disappear during filter instantiation;
+ don't mark it as an error */
+ rc = 0;
+ goto exit;
+ }
+
rc = __virNWFilterInstantiateFilter(conn,
teardownOld,
net->ifname,
@@ -917,6 +924,7 @@ _virNWFilterInstantiateFilter(virConnect
false,
foundNewFilter);
+exit:
virNWFilterUnlockFilterUpdates();
return rc;