forked from luck/tmp_suning_uos_patched
Merge branch 'bonding-bug-fixes-and-regressions'
Debabrata Banerjee says: ==================== bonding: bug fixes and regressions Fixes to bonding driver for balance-alb mode, suitable for stable. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
89dd2e752c
|
@ -450,7 +450,7 @@ static void rlb_update_client(struct rlb_client_info *client_info)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (!client_info->slave)
|
||||
if (!client_info->slave || !is_valid_ether_addr(client_info->mac_dst))
|
||||
return;
|
||||
|
||||
for (i = 0; i < RLB_ARP_BURST_SIZE; i++) {
|
||||
|
@ -943,6 +943,10 @@ static void alb_send_lp_vid(struct slave *slave, u8 mac_addr[],
|
|||
skb->priority = TC_PRIO_CONTROL;
|
||||
skb->dev = slave->dev;
|
||||
|
||||
netdev_dbg(slave->bond->dev,
|
||||
"Send learning packet: dev %s mac %pM vlan %d\n",
|
||||
slave->dev->name, mac_addr, vid);
|
||||
|
||||
if (vid)
|
||||
__vlan_hwaccel_put_tag(skb, vlan_proto, vid);
|
||||
|
||||
|
@ -965,14 +969,13 @@ static int alb_upper_dev_walk(struct net_device *upper, void *_data)
|
|||
u8 *mac_addr = data->mac_addr;
|
||||
struct bond_vlan_tag *tags;
|
||||
|
||||
if (is_vlan_dev(upper) && vlan_get_encap_level(upper) == 0) {
|
||||
if (strict_match &&
|
||||
ether_addr_equal_64bits(mac_addr,
|
||||
upper->dev_addr)) {
|
||||
if (is_vlan_dev(upper) &&
|
||||
bond->nest_level == vlan_get_encap_level(upper) - 1) {
|
||||
if (upper->addr_assign_type == NET_ADDR_STOLEN) {
|
||||
alb_send_lp_vid(slave, mac_addr,
|
||||
vlan_dev_vlan_proto(upper),
|
||||
vlan_dev_vlan_id(upper));
|
||||
} else if (!strict_match) {
|
||||
} else {
|
||||
alb_send_lp_vid(slave, upper->dev_addr,
|
||||
vlan_dev_vlan_proto(upper),
|
||||
vlan_dev_vlan_id(upper));
|
||||
|
|
|
@ -1738,6 +1738,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
|
|||
if (bond_mode_uses_xmit_hash(bond))
|
||||
bond_update_slave_arr(bond, NULL);
|
||||
|
||||
bond->nest_level = dev_get_nest_level(bond_dev);
|
||||
|
||||
netdev_info(bond_dev, "Enslaving %s as %s interface with %s link\n",
|
||||
slave_dev->name,
|
||||
bond_is_active_slave(new_slave) ? "an active" : "a backup",
|
||||
|
|
|
@ -198,6 +198,7 @@ struct bonding {
|
|||
struct slave __rcu *primary_slave;
|
||||
struct bond_up_slave __rcu *slave_arr; /* Array of usable slaves */
|
||||
bool force_primary;
|
||||
u32 nest_level;
|
||||
s32 slave_cnt; /* never change this value outside the attach/detach wrappers */
|
||||
int (*recv_probe)(const struct sk_buff *, struct bonding *,
|
||||
struct slave *);
|
||||
|
|
Loading…
Reference in New Issue
Block a user