summaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authordingtianhong <dingtianhong@huawei.com>2014-05-15 19:11:36 +0800
committerDavid S. Miller <davem@davemloft.net>2014-05-15 23:35:16 -0400
commita188a54d11629bef2169052297e61f3767ca8ce5 (patch)
treeabf311bb54dbb685f4ef8543a1708211a0dc36f5 /drivers/net
parent112a3513b51976111e5e4a3115485d3fc89410c1 (diff)
downloadop-kernel-dev-a188a54d11629bef2169052297e61f3767ca8ce5.zip
op-kernel-dev-a188a54d11629bef2169052297e61f3767ca8ce5.tar.gz
macvlan: simplify the structure port
The port->count was used to count the number of macvlan devs in the same port, but the list vlans could play the same role to do that, so free the port if the list vlans is empty and no need to use the parameter count. Signed-off-by: Ding Tianhong <dingtianhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/macvlan.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index e03707d..f4701da 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -44,9 +44,10 @@ struct macvlan_port {
struct sk_buff_head bc_queue;
struct work_struct bc_work;
bool passthru;
- int count;
};
+#define MACVLAN_PORT_IS_EMPTY(port) list_empty(&port->vlans)
+
struct macvlan_skb_cb {
const struct macvlan_dev *src;
};
@@ -628,8 +629,7 @@ static void macvlan_uninit(struct net_device *dev)
free_percpu(vlan->pcpu_stats);
- port->count -= 1;
- if (!port->count)
+ if (MACVLAN_PORT_IS_EMPTY(port))
macvlan_port_destroy(port->dev);
}
@@ -931,13 +931,12 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
vlan->flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]);
if (vlan->mode == MACVLAN_MODE_PASSTHRU) {
- if (port->count)
+ if (!MACVLAN_PORT_IS_EMPTY(port))
return -EINVAL;
port->passthru = true;
eth_hw_addr_inherit(dev, lowerdev);
}
- port->count += 1;
err = register_netdevice(dev);
if (err < 0)
goto destroy_port;
@@ -955,8 +954,7 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
unregister_netdev:
unregister_netdevice(dev);
destroy_port:
- port->count -= 1;
- if (!port->count)
+ if (MACVLAN_PORT_IS_EMPTY(port))
macvlan_port_destroy(lowerdev);
return err;
OpenPOWER on IntegriCloud