Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 341636
b: refs/heads/master
c: 92eb1d4
h: refs/heads/master
v: v3
  • Loading branch information
Jesse Gross committed Nov 28, 2012
1 parent 8fb1c47 commit 3ff35bf
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 39c7caebc94e851f58b84b54659156dd30522e8e
refs/heads/master: 92eb1d477145b2e7780b5002e856f70b8c3d74da
14 changes: 10 additions & 4 deletions trunk/net/openvswitch/vport-netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,15 @@ static struct vport *netdev_create(const struct vport_parms *parms)
return ERR_PTR(err);
}

static void free_port_rcu(struct rcu_head *rcu)
{
struct netdev_vport *netdev_vport = container_of(rcu,
struct netdev_vport, rcu);

dev_put(netdev_vport->dev);
ovs_vport_free(vport_from_priv(netdev_vport));
}

static void netdev_destroy(struct vport *vport)
{
struct netdev_vport *netdev_vport = netdev_vport_priv(vport);
Expand All @@ -122,10 +131,7 @@ static void netdev_destroy(struct vport *vport)
netdev_rx_handler_unregister(netdev_vport->dev);
dev_set_promiscuity(netdev_vport->dev, -1);

synchronize_rcu();

dev_put(netdev_vport->dev);
ovs_vport_free(vport);
call_rcu(&netdev_vport->rcu, free_port_rcu);
}

const char *ovs_netdev_get_name(const struct vport *vport)
Expand Down
3 changes: 3 additions & 0 deletions trunk/net/openvswitch/vport-netdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,15 @@
#define VPORT_NETDEV_H 1

#include <linux/netdevice.h>
#include <linux/rcupdate.h>

#include "vport.h"

struct vport *ovs_netdev_get_vport(struct net_device *dev);

struct netdev_vport {
struct rcu_head rcu;

struct net_device *dev;
};

Expand Down

0 comments on commit 3ff35bf

Please sign in to comment.