]> rtime.felk.cvut.cz Git - can-eth-gw-linux.git/blobdiff - net/ipv4/fib_frontend.c
net: remove delay at device dismantle
[can-eth-gw-linux.git] / net / ipv4 / fib_frontend.c
index 7f073a38c87d88a89f2c11d3cd56b67a66d194b2..fd7d9ae64f165f9bd9b33da68a917e6a97462e7f 100644 (file)
@@ -1041,7 +1041,7 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
 static int fib_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
 {
        struct net_device *dev = ptr;
-       struct in_device *in_dev = __in_dev_get_rtnl(dev);
+       struct in_device *in_dev;
        struct net *net = dev_net(dev);
 
        if (event == NETDEV_UNREGISTER) {
@@ -1050,9 +1050,11 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
                return NOTIFY_DONE;
        }
 
-       if (!in_dev)
+       if (event == NETDEV_UNREGISTER_FINAL)
                return NOTIFY_DONE;
 
+       in_dev = __in_dev_get_rtnl(dev);
+
        switch (event) {
        case NETDEV_UP:
                for_ifa(in_dev) {
@@ -1071,8 +1073,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:
-               break;
        }
        return NOTIFY_DONE;
 }