FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Ubuntu > Ubuntu Kernel Team

 
 
LinkBack Thread Tools
 
Old 10-04-2012, 11:57 AM
Stefan Bader
 
Default UBUNTU: SAUCE: net/ipv4: Always flush route cache on unregister batch call

When doing (for example) a connect to an unused port on localhost
in a new net namespace, it was observed that lo could not be
removed immediately because there were still references on it.
To release those references could take a very long time (up to
five minutes).

This was tracked down to an element in the route cache which was
supposed to be dropped by a notify call with sending a
NETDEVICE_UNREGISTER_BATCH message, but as in_dev is already unset
then, the case statement never was executed.

Move the handling of that notification up to be done regardless of
the state of in_dev.

BugLink: http://bugs.launchpad.net/bugs/1021471

Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
---
net/ipv4/fib_frontend.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index 3854411..f2cabd9 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -998,6 +998,14 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
fib_disable_ip(dev, 2, -1);
return NOTIFY_DONE;
}
+ if (event == NETDEV_UNREGISTER_BATCH) {
+ /* The batch unregister is only called on the first
+ * device in the list of devices being unregistered.
+ * Therefore we should not pass dev_net(dev) in here.
+ */
+ rt_cache_flush_batch(NULL);
+ return NOTIFY_DONE;
+ }

if (!in_dev)
return NOTIFY_DONE;
@@ -1020,13 +1028,6 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
case NETDEV_CHANGE:
rt_cache_flush(dev_net(dev), 0);
break;
- case NETDEV_UNREGISTER_BATCH:
- /* The batch unregister is only called on the first
- * device in the list of devices being unregistered.
- * Therefore we should not pass dev_net(dev) in here.
- */
- rt_cache_flush_batch(NULL);
- break;
}
return NOTIFY_DONE;
}
--
1.7.9.5


--
kernel-team mailing list
kernel-team@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/kernel-team
 

Thread Tools




All times are GMT. The time now is 10:55 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org