Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/renesas/ravb_main.c kernel/bpf/syscall.c net/ipv4/ipmr.c All three conflicts were cases of overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -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))
|
||||
|
@@ -117,7 +117,6 @@ static struct vport_ops ovs_geneve_vport_ops = {
|
||||
.destroy = ovs_netdev_tunnel_destroy,
|
||||
.get_options = geneve_get_options,
|
||||
.send = dev_queue_xmit,
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
static int __init ovs_geneve_tnl_init(void)
|
||||
|
@@ -89,7 +89,6 @@ static struct vport_ops ovs_gre_vport_ops = {
|
||||
.create = gre_create,
|
||||
.send = dev_queue_xmit,
|
||||
.destroy = ovs_netdev_tunnel_destroy,
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
static int __init ovs_gre_tnl_init(void)
|
||||
|
@@ -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();
|
||||
|
||||
|
@@ -71,7 +71,7 @@ static struct hlist_head *hash_bucket(const struct net *net, const char *name)
|
||||
return &dev_table[hash & (VPORT_HASH_BUCKETS - 1)];
|
||||
}
|
||||
|
||||
int ovs_vport_ops_register(struct vport_ops *ops)
|
||||
int __ovs_vport_ops_register(struct vport_ops *ops)
|
||||
{
|
||||
int err = -EEXIST;
|
||||
struct vport_ops *o;
|
||||
@@ -87,7 +87,7 @@ errout:
|
||||
ovs_unlock();
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ovs_vport_ops_register);
|
||||
EXPORT_SYMBOL_GPL(__ovs_vport_ops_register);
|
||||
|
||||
void ovs_vport_ops_unregister(struct vport_ops *ops)
|
||||
{
|
||||
@@ -256,8 +256,8 @@ int ovs_vport_set_options(struct vport *vport, struct nlattr *options)
|
||||
*
|
||||
* @vport: vport to delete.
|
||||
*
|
||||
* Detaches @vport from its datapath and destroys it. It is possible to fail
|
||||
* for reasons such as lack of memory. ovs_mutex must be held.
|
||||
* Detaches @vport from its datapath and destroys it. ovs_mutex must
|
||||
* be held.
|
||||
*/
|
||||
void ovs_vport_del(struct vport *vport)
|
||||
{
|
||||
|
@@ -196,7 +196,13 @@ static inline const char *ovs_vport_name(struct vport *vport)
|
||||
return vport->dev->name;
|
||||
}
|
||||
|
||||
int ovs_vport_ops_register(struct vport_ops *ops);
|
||||
int __ovs_vport_ops_register(struct vport_ops *ops);
|
||||
#define ovs_vport_ops_register(ops) \
|
||||
({ \
|
||||
(ops)->owner = THIS_MODULE; \
|
||||
__ovs_vport_ops_register(ops); \
|
||||
})
|
||||
|
||||
void ovs_vport_ops_unregister(struct vport_ops *ops);
|
||||
|
||||
static inline struct rtable *ovs_tunnel_route_lookup(struct net *net,
|
||||
|
Reference in New Issue
Block a user