From 762101c7affbd32af18eccc07249c2684cbb84a2 Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Thu, 11 Aug 2011 06:56:50 -0400 Subject: [PATCH] nwfilter: tolerate disappearing interfaces while instantiating filter When instantiating a filter, a VM may disappear and remove its tap interfaces. Tolerate this case and don't report an error. --- src/nwfilter/nwfilter_gentech_driver.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter_gentech_driver.c index 7d9871a146..78919838b4 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -898,11 +898,18 @@ _virNWFilterInstantiateFilter(virConnectPtr conn, 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 cleanup; + } + rc = __virNWFilterInstantiateFilter(conn, teardownOld, net->ifname, @@ -917,6 +924,7 @@ _virNWFilterInstantiateFilter(virConnectPtr conn, false, foundNewFilter); +cleanup: virNWFilterUnlockFilterUpdates(); return rc;