diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 07f257d4..6aac0ae 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -665,6 +665,16 @@ static int bond_check_dev_link(struct bonding *bond, return reporting ? -1 : BMSR_LSTATUS; } +static unsigned long bond_dev_trans_start(struct net_device *dev) +{ + struct net_device *real_dev = dev; + + if (dev->priv_flags & IFF_802_1Q_VLAN) + real_dev = vlan_dev_real_dev(dev); + + return dev_trans_start(real_dev); +} + /*----------------------------- Multicast list ------------------------------*/ /* @@ -2750,7 +2760,7 @@ void bond_loadbalance_arp_mon(struct work_struct *work) * so it can wait */ bond_for_each_slave(bond, slave, i) { - unsigned long trans_start = dev_trans_start(slave->dev); + unsigned long trans_start = bond_dev_trans_start(slave->dev); if (slave->link != BOND_LINK_UP) { if (time_in_range(jiffies, @@ -2912,7 +2922,7 @@ static int bond_ab_arp_inspect(struct bonding *bond, int delta_in_ticks) * - (more than 2*delta since receive AND * the bond has an IP address) */ - trans_start = dev_trans_start(slave->dev); + trans_start = bond_dev_trans_start(slave->dev); if (bond_is_active_slave(slave) && (!time_in_range(jiffies, trans_start - delta_in_ticks, @@ -2947,7 +2957,7 @@ static void bond_ab_arp_commit(struct bonding *bond, int delta_in_ticks) continue; case BOND_LINK_UP: - trans_start = dev_trans_start(slave->dev); + trans_start = bond_dev_trans_start(slave->dev); if ((!bond->curr_active_slave && time_in_range(jiffies, trans_start - delta_in_ticks,