diff options
author | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2015-12-16 14:55:49 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2015-12-16 14:55:49 -0300 |
commit | f3a16ba6a1152b8966dcadc668af4cf00623c7b1 (patch) | |
tree | 5fee49a027f6fddf70b29369d24703946370eb77 /net/openvswitch | |
parent | b652965369918b9d992dc42fb060240f94d98769 (diff) |
Linux-libre 4.3.3-gnu
Diffstat (limited to 'net/openvswitch')
-rw-r--r-- | net/openvswitch/dp_notify.c | 2 | ||||
-rw-r--r-- | net/openvswitch/vport-netdev.c | 8 |
2 files changed, 7 insertions, 3 deletions
diff --git a/net/openvswitch/dp_notify.c b/net/openvswitch/dp_notify.c index a7a80a6b7..653d073ba 100644 --- a/net/openvswitch/dp_notify.c +++ b/net/openvswitch/dp_notify.c @@ -58,7 +58,7 @@ void ovs_dp_notify_wq(struct work_struct *work) struct hlist_node *n; hlist_for_each_entry_safe(vport, n, &dp->ports[i], dp_hash_node) { - if (vport->ops->type != OVS_VPORT_TYPE_NETDEV) + if (vport->ops->type == OVS_VPORT_TYPE_INTERNAL) continue; if (!(vport->dev->priv_flags & IFF_OVS_DATAPATH)) diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c index f7e8dcce7..ac14c4886 100644 --- a/net/openvswitch/vport-netdev.c +++ b/net/openvswitch/vport-netdev.c @@ -180,9 +180,13 @@ void ovs_netdev_tunnel_destroy(struct vport *vport) if (vport->dev->priv_flags & IFF_OVS_DATAPATH) ovs_netdev_detach_dev(vport); - /* Early release so we can unregister the device */ + /* We can be invoked by both explicit vport deletion and + * underlying netdev deregistration; delete the link only + * if it's not already shutting down. + */ + if (vport->dev->reg_state == NETREG_REGISTERED) + rtnl_delete_link(vport->dev); dev_put(vport->dev); - rtnl_delete_link(vport->dev); vport->dev = NULL; rtnl_unlock(); |