alb_send_learning_packets(slave,slave->dev->dev_addr); 
alb_send_learning_packets(slave, slave->dev->dev_addr); 
void bond_alb_monitor(struct bonding *bond){	struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));	struct slave *slave;	int i;	read_lock(&bond->lock);	if (bond->kill_timers) {		goto out;	}	if (bond->slave_cnt == 0) {		bond_info->tx_rebalance_counter = 0;		bond_info->lp_counter = 0;		goto re_arm;	}	bond_info->tx_rebalance_counter++;	bond_info->lp_counter++;	/* send learning packets */	if (bond_info->lp_counter >= BOND_ALB_LP_TICKS) {		/* change of curr_active_slave involves swapping of mac addresses.		 * in order to avoid this swapping from happening while		 * sending the learning packets, the curr_slave_lock must be held for		 * read.		 */		read_lock(&bond->curr_slave_lock);		bond_for_each_slave(bond, slave, i) {			alb_send_learning_packets(slave,slave->dev->dev_addr);		}		read_unlock(&bond->curr_slave_lock);		bond_info->lp_counter = 0;	}	/* rebalance tx traffic */	if (bond_info->tx_rebalance_counter >= BOND_TLB_REBALANCE_TICKS) {		read_lock(&bond->curr_slave_lock);		bond_for_each_slave(bond, slave, i) {			tlb_clear_slave(bond, slave, 1);			if (slave == bond->curr_active_slave) {				SLAVE_TLB_INFO(slave).load =					bond_info->unbalanced_load /						BOND_TLB_REBALANCE_INTERVAL;				bond_info->unbalanced_load = 0;			}		}		read_unlock(&bond->curr_slave_lock);		bond_info->tx_rebalance_counter = 0;	}	/* handle rlb stuff */	if (bond_info->rlb_enabled) {		/* the following code changes the promiscuity of the		 * the curr_active_slave. It needs to be locked with a		 * write lock to protect from other code that also		 * sets the promiscuity.		 */		write_lock(&bond->curr_slave_lock);		if (bond_info->primary_is_promisc &&		    (++bond_info->rlb_promisc_timeout_counter >= RLB_PROMISC_TIMEOUT)) {			bond_info->rlb_promisc_timeout_counter = 0;			/* If the primary was set to promiscuous mode			 * because a slave was disabled then			 * it can now leave promiscuous mode.			 */			dev_set_promiscuity(bond->curr_active_slave->dev, -1);			bond_info->primary_is_promisc = 0;		}		write_unlock(&bond->curr_slave_lock);		if (bond_info->rlb_rebalance) {			bond_info->rlb_rebalance = 0;			rlb_rebalance(bond);		}		/* check if clients need updating */		if (bond_info->rx_ntt) {			if (bond_info->rlb_update_delay_counter) {				--bond_info->rlb_update_delay_counter;			} else {				rlb_update_rx_clients(bond);				if (bond_info->rlb_update_retry_counter) {					--bond_info->rlb_update_retry_counter;				} else {					bond_info->rx_ntt = 0;				}			}		}	}re_arm:	mod_timer(&(bond_info->alb_timer), jiffies + alb_delta_in_ticks);out:	read_unlock(&bond->lock);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/e944ef79184ff7f283e7bf79496d2873a0b0410b/bond_alb.c/buggy/drivers/net/bonding/bond_alb.c