diff options
author | Nikolay Aleksandrov <razor@BlackWall.org> | 2013-08-01 16:54:50 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-01 16:42:02 -0700 |
commit | 15077228cab68e5e8c3cbf26a7f6ebacfac4c829 (patch) | |
tree | f0b8953b861203320d5387b809b0bcb5a8ef6179 /drivers/net/bonding/bonding.h | |
parent | 78a646ced88450754613573f7d1fa7cb0de14bb3 (diff) | |
download | lwn-15077228cab68e5e8c3cbf26a7f6ebacfac4c829.tar.gz lwn-15077228cab68e5e8c3cbf26a7f6ebacfac4c829.zip |
bonding: factor out slave id tx code and simplify xmit paths
I factored out the tx xmit code which relies on slave id in
bond_xmit_slave_id. It is global because later it can be used also in
3ad mode xmit. Unnecessary obvious comments are removed. Active-backup
mode is simplified because bond_dev_queue_xmit always consumes the skb.
bond_xmit_xor becomes one line because of bond_xmit_slave_id.
bond_for_each_slave_from is not used in bond_xmit_slave_id because later
when RCU is used we can avoid important race condition by using standard
rculist routines.
Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding/bonding.h')
-rw-r--r-- | drivers/net/bonding/bonding.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h index cfd9b493f5b0..0995974c71ac 100644 --- a/drivers/net/bonding/bonding.h +++ b/drivers/net/bonding/bonding.h @@ -426,10 +426,20 @@ static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be3 return addr; } +static inline bool slave_can_tx(struct slave *slave) +{ + if (IS_UP(slave->dev) && slave->link == BOND_LINK_UP && + bond_is_active_slave(slave)) + return true; + else + return false; +} + struct bond_net; struct vlan_entry *bond_next_vlan(struct bonding *bond, struct vlan_entry *curr); int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev); +void bond_xmit_slave_id(struct bonding *bond, struct sk_buff *skb, int slave_id); int bond_create(struct net *net, const char *name); int bond_create_sysfs(struct bond_net *net); void bond_destroy_sysfs(struct bond_net *net); |