diff options
Diffstat (limited to 'drivers/net/vrf.c')
-rw-r--r-- | drivers/net/vrf.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c index f4d0054981c6..8a1eaf3c302a 100644 --- a/drivers/net/vrf.c +++ b/drivers/net/vrf.c | |||
@@ -922,15 +922,10 @@ static int vrf_del_slave(struct net_device *dev, struct net_device *port_dev) | |||
922 | static void vrf_dev_uninit(struct net_device *dev) | 922 | static void vrf_dev_uninit(struct net_device *dev) |
923 | { | 923 | { |
924 | struct net_vrf *vrf = netdev_priv(dev); | 924 | struct net_vrf *vrf = netdev_priv(dev); |
925 | struct net_device *port_dev; | ||
926 | struct list_head *iter; | ||
927 | 925 | ||
928 | vrf_rtable_release(dev, vrf); | 926 | vrf_rtable_release(dev, vrf); |
929 | vrf_rt6_release(dev, vrf); | 927 | vrf_rt6_release(dev, vrf); |
930 | 928 | ||
931 | netdev_for_each_lower_dev(dev, port_dev, iter) | ||
932 | vrf_del_slave(dev, port_dev); | ||
933 | |||
934 | free_percpu(dev->dstats); | 929 | free_percpu(dev->dstats); |
935 | dev->dstats = NULL; | 930 | dev->dstats = NULL; |
936 | } | 931 | } |
@@ -1386,6 +1381,12 @@ static int vrf_validate(struct nlattr *tb[], struct nlattr *data[], | |||
1386 | 1381 | ||
1387 | static void vrf_dellink(struct net_device *dev, struct list_head *head) | 1382 | static void vrf_dellink(struct net_device *dev, struct list_head *head) |
1388 | { | 1383 | { |
1384 | struct net_device *port_dev; | ||
1385 | struct list_head *iter; | ||
1386 | |||
1387 | netdev_for_each_lower_dev(dev, port_dev, iter) | ||
1388 | vrf_del_slave(dev, port_dev); | ||
1389 | |||
1389 | unregister_netdevice_queue(dev, head); | 1390 | unregister_netdevice_queue(dev, head); |
1390 | } | 1391 | } |
1391 | 1392 | ||