diff options
author | David S. Miller <davem@davemloft.net> | 2010-07-07 18:59:38 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-07 18:59:38 -0400 |
commit | 597e608a8492d662736c9bc6aa507dbf1cadc17d (patch) | |
tree | 6c330cdd0a4809f67dd191b37e34f5b4318cef78 /drivers/net/bonding | |
parent | acbc0f039ff4b93da737c91937b7c70018ded39f (diff) | |
parent | 33b665eeeb85956ccbdf31c4c31a4e2a31133c44 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r-- | drivers/net/bonding/bond_alb.c | 3 | ||||
-rw-r--r-- | drivers/net/bonding/bond_main.c | 33 |
2 files changed, 24 insertions, 12 deletions
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index 25c14c6236f5..3662d6e446a9 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c | |||
@@ -333,7 +333,8 @@ static void rlb_update_entry_from_arp(struct bonding *bond, struct arp_pkt *arp) | |||
333 | 333 | ||
334 | if ((client_info->assigned) && | 334 | if ((client_info->assigned) && |
335 | (client_info->ip_src == arp->ip_dst) && | 335 | (client_info->ip_src == arp->ip_dst) && |
336 | (client_info->ip_dst == arp->ip_src)) { | 336 | (client_info->ip_dst == arp->ip_src) && |
337 | (compare_ether_addr_64bits(client_info->mac_dst, arp->mac_src))) { | ||
337 | /* update the clients MAC address */ | 338 | /* update the clients MAC address */ |
338 | memcpy(client_info->mac_dst, arp->mac_src, ETH_ALEN); | 339 | memcpy(client_info->mac_dst, arp->mac_src, ETH_ALEN); |
339 | client_info->ntt = 1; | 340 | client_info->ntt = 1; |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 9bb9bfa225b6..822808810a13 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -176,7 +176,7 @@ static int arp_ip_count; | |||
176 | static int bond_mode = BOND_MODE_ROUNDROBIN; | 176 | static int bond_mode = BOND_MODE_ROUNDROBIN; |
177 | static int xmit_hashtype = BOND_XMIT_POLICY_LAYER2; | 177 | static int xmit_hashtype = BOND_XMIT_POLICY_LAYER2; |
178 | static int lacp_fast; | 178 | static int lacp_fast; |
179 | 179 | static int disable_netpoll = 1; | |
180 | 180 | ||
181 | const struct bond_parm_tbl bond_lacp_tbl[] = { | 181 | const struct bond_parm_tbl bond_lacp_tbl[] = { |
182 | { "slow", AD_LACP_SLOW}, | 182 | { "slow", AD_LACP_SLOW}, |
@@ -1766,15 +1766,23 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1766 | bond_set_carrier(bond); | 1766 | bond_set_carrier(bond); |
1767 | 1767 | ||
1768 | #ifdef CONFIG_NET_POLL_CONTROLLER | 1768 | #ifdef CONFIG_NET_POLL_CONTROLLER |
1769 | if (slaves_support_netpoll(bond_dev)) { | 1769 | /* |
1770 | bond_dev->priv_flags &= ~IFF_DISABLE_NETPOLL; | 1770 | * Netpoll and bonding is broken, make sure it is not initialized |
1771 | if (bond_dev->npinfo) | 1771 | * until it is fixed. |
1772 | slave_dev->npinfo = bond_dev->npinfo; | 1772 | */ |
1773 | } else if (!(bond_dev->priv_flags & IFF_DISABLE_NETPOLL)) { | 1773 | if (disable_netpoll) { |
1774 | bond_dev->priv_flags |= IFF_DISABLE_NETPOLL; | 1774 | bond_dev->priv_flags |= IFF_DISABLE_NETPOLL; |
1775 | pr_info("New slave device %s does not support netpoll\n", | 1775 | } else { |
1776 | slave_dev->name); | 1776 | if (slaves_support_netpoll(bond_dev)) { |
1777 | pr_info("Disabling netpoll support for %s\n", bond_dev->name); | 1777 | bond_dev->priv_flags &= ~IFF_DISABLE_NETPOLL; |
1778 | if (bond_dev->npinfo) | ||
1779 | slave_dev->npinfo = bond_dev->npinfo; | ||
1780 | } else if (!(bond_dev->priv_flags & IFF_DISABLE_NETPOLL)) { | ||
1781 | bond_dev->priv_flags |= IFF_DISABLE_NETPOLL; | ||
1782 | pr_info("New slave device %s does not support netpoll\n", | ||
1783 | slave_dev->name); | ||
1784 | pr_info("Disabling netpoll support for %s\n", bond_dev->name); | ||
1785 | } | ||
1778 | } | 1786 | } |
1779 | #endif | 1787 | #endif |
1780 | read_unlock(&bond->lock); | 1788 | read_unlock(&bond->lock); |
@@ -1977,8 +1985,11 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1977 | 1985 | ||
1978 | #ifdef CONFIG_NET_POLL_CONTROLLER | 1986 | #ifdef CONFIG_NET_POLL_CONTROLLER |
1979 | read_lock_bh(&bond->lock); | 1987 | read_lock_bh(&bond->lock); |
1980 | if (slaves_support_netpoll(bond_dev)) | 1988 | |
1981 | bond_dev->priv_flags &= ~IFF_DISABLE_NETPOLL; | 1989 | /* Make sure netpoll over stays disabled until fixed. */ |
1990 | if (!disable_netpoll) | ||
1991 | if (slaves_support_netpoll(bond_dev)) | ||
1992 | bond_dev->priv_flags &= ~IFF_DISABLE_NETPOLL; | ||
1982 | read_unlock_bh(&bond->lock); | 1993 | read_unlock_bh(&bond->lock); |
1983 | if (slave_dev->netdev_ops->ndo_netpoll_cleanup) | 1994 | if (slave_dev->netdev_ops->ndo_netpoll_cleanup) |
1984 | slave_dev->netdev_ops->ndo_netpoll_cleanup(slave_dev); | 1995 | slave_dev->netdev_ops->ndo_netpoll_cleanup(slave_dev); |