Commit 25780410 authored by Debabrata Banerjee's avatar Debabrata Banerjee Committed by David S. Miller

bonding: don't queue up extraneous rlb updates

arps for incomplete entries can't be sent anyway.
Signed-off-by: default avatarDebabrata Banerjee <dbanerje@akamai.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 967c2993
...@@ -421,7 +421,8 @@ static void rlb_clear_slave(struct bonding *bond, struct slave *slave) ...@@ -421,7 +421,8 @@ static void rlb_clear_slave(struct bonding *bond, struct slave *slave)
if (assigned_slave) { if (assigned_slave) {
rx_hash_table[index].slave = assigned_slave; rx_hash_table[index].slave = assigned_slave;
if (!ether_addr_equal_64bits(rx_hash_table[index].mac_dst, if (!ether_addr_equal_64bits(rx_hash_table[index].mac_dst,
mac_bcast)) { mac_bcast) &&
!is_zero_ether_addr(rx_hash_table[index].mac_dst)) {
bond_info->rx_hashtbl[index].ntt = 1; bond_info->rx_hashtbl[index].ntt = 1;
bond_info->rx_ntt = 1; bond_info->rx_ntt = 1;
/* A slave has been removed from the /* A slave has been removed from the
...@@ -524,7 +525,8 @@ static void rlb_req_update_slave_clients(struct bonding *bond, struct slave *sla ...@@ -524,7 +525,8 @@ static void rlb_req_update_slave_clients(struct bonding *bond, struct slave *sla
client_info = &(bond_info->rx_hashtbl[hash_index]); client_info = &(bond_info->rx_hashtbl[hash_index]);
if ((client_info->slave == slave) && if ((client_info->slave == slave) &&
!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast)) { !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) &&
!is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1; client_info->ntt = 1;
ntt = 1; ntt = 1;
} }
...@@ -565,7 +567,8 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip) ...@@ -565,7 +567,8 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip)
if ((client_info->ip_src == src_ip) && if ((client_info->ip_src == src_ip) &&
!ether_addr_equal_64bits(client_info->slave->dev->dev_addr, !ether_addr_equal_64bits(client_info->slave->dev->dev_addr,
bond->dev->dev_addr) && bond->dev->dev_addr) &&
!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast)) { !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) &&
!is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1; client_info->ntt = 1;
bond_info->rx_ntt = 1; bond_info->rx_ntt = 1;
} }
...@@ -641,7 +644,8 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon ...@@ -641,7 +644,8 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon
ether_addr_copy(client_info->mac_src, arp->mac_src); ether_addr_copy(client_info->mac_src, arp->mac_src);
client_info->slave = assigned_slave; client_info->slave = assigned_slave;
if (!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast)) { if (!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) &&
!is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1; client_info->ntt = 1;
bond->alb_info.rx_ntt = 1; bond->alb_info.rx_ntt = 1;
} else { } else {
...@@ -733,8 +737,10 @@ static void rlb_rebalance(struct bonding *bond) ...@@ -733,8 +737,10 @@ static void rlb_rebalance(struct bonding *bond)
assigned_slave = __rlb_next_rx_slave(bond); assigned_slave = __rlb_next_rx_slave(bond);
if (assigned_slave && (client_info->slave != assigned_slave)) { if (assigned_slave && (client_info->slave != assigned_slave)) {
client_info->slave = assigned_slave; client_info->slave = assigned_slave;
client_info->ntt = 1; if (!is_zero_ether_addr(client_info->mac_dst)) {
ntt = 1; client_info->ntt = 1;
ntt = 1;
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment