Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -421,7 +421,8 @@ static void rlb_clear_slave(struct bonding *bond, struct slave *slave)
			if (assigned_slave) {
				rx_hash_table[index].slave = assigned_slave;
				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_ntt = 1;
					/* A slave has been removed from the
@@ -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]);

		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;
			ntt = 1;
		}
@@ -565,7 +567,8 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip)
		if ((client_info->ip_src == src_ip) &&
		    !ether_addr_equal_64bits(client_info->slave->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;
			bond_info->rx_ntt = 1;
		}
@@ -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);
		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;
			bond->alb_info.rx_ntt = 1;
		} else {
@@ -733,10 +737,12 @@ static void rlb_rebalance(struct bonding *bond)
		assigned_slave = __rlb_next_rx_slave(bond);
		if (assigned_slave && (client_info->slave != assigned_slave)) {
			client_info->slave = assigned_slave;
			if (!is_zero_ether_addr(client_info->mac_dst)) {
				client_info->ntt = 1;
				ntt = 1;
			}
		}
	}

	/* update the team's flag only after the whole iteration */
	if (ntt)