diff options
| -rw-r--r-- | drivers/net/macvlan.c | 5 | ||||
| -rw-r--r-- | net/core/rtnetlink.c | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 3ad5425b82dd..d7c0bc62da7f 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
| @@ -785,6 +785,7 @@ static int macvlan_device_event(struct notifier_block *unused, | |||
| 785 | struct net_device *dev = ptr; | 785 | struct net_device *dev = ptr; |
| 786 | struct macvlan_dev *vlan, *next; | 786 | struct macvlan_dev *vlan, *next; |
| 787 | struct macvlan_port *port; | 787 | struct macvlan_port *port; |
| 788 | LIST_HEAD(list_kill); | ||
| 788 | 789 | ||
| 789 | if (!macvlan_port_exists(dev)) | 790 | if (!macvlan_port_exists(dev)) |
| 790 | return NOTIFY_DONE; | 791 | return NOTIFY_DONE; |
| @@ -810,7 +811,9 @@ static int macvlan_device_event(struct notifier_block *unused, | |||
| 810 | break; | 811 | break; |
| 811 | 812 | ||
| 812 | list_for_each_entry_safe(vlan, next, &port->vlans, list) | 813 | list_for_each_entry_safe(vlan, next, &port->vlans, list) |
| 813 | vlan->dev->rtnl_link_ops->dellink(vlan->dev, NULL); | 814 | vlan->dev->rtnl_link_ops->dellink(vlan->dev, &list_kill); |
| 815 | unregister_netdevice_many(&list_kill); | ||
| 816 | list_del(&list_kill); | ||
| 814 | break; | 817 | break; |
| 815 | case NETDEV_PRE_TYPE_CHANGE: | 818 | case NETDEV_PRE_TYPE_CHANGE: |
| 816 | /* Forbid underlaying device to change its type. */ | 819 | /* Forbid underlaying device to change its type. */ |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 5a160f4a1ba0..d2ba2597c75a 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
| @@ -1501,6 +1501,7 @@ static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
| 1501 | char ifname[IFNAMSIZ]; | 1501 | char ifname[IFNAMSIZ]; |
| 1502 | struct nlattr *tb[IFLA_MAX+1]; | 1502 | struct nlattr *tb[IFLA_MAX+1]; |
| 1503 | int err; | 1503 | int err; |
| 1504 | LIST_HEAD(list_kill); | ||
| 1504 | 1505 | ||
| 1505 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy); | 1506 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy); |
| 1506 | if (err < 0) | 1507 | if (err < 0) |
| @@ -1524,7 +1525,9 @@ static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
| 1524 | if (!ops) | 1525 | if (!ops) |
| 1525 | return -EOPNOTSUPP; | 1526 | return -EOPNOTSUPP; |
| 1526 | 1527 | ||
| 1527 | ops->dellink(dev, NULL); | 1528 | ops->dellink(dev, &list_kill); |
| 1529 | unregister_netdevice_many(&list_kill); | ||
| 1530 | list_del(&list_kill); | ||
| 1528 | return 0; | 1531 | return 0; |
| 1529 | } | 1532 | } |
| 1530 | 1533 | ||
