diff options
Diffstat (limited to 'drivers/net/bonding/bond_main.c')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 58c4e36f87d7..8032126fd589 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -4242,8 +4242,8 @@ out: | |||
4242 | } | 4242 | } |
4243 | 4243 | ||
4244 | static void bond_activebackup_xmit_copy(struct sk_buff *skb, | 4244 | static void bond_activebackup_xmit_copy(struct sk_buff *skb, |
4245 | struct bonding *bond, | 4245 | struct bonding *bond, |
4246 | struct slave *slave) | 4246 | struct slave *slave) |
4247 | { | 4247 | { |
4248 | struct sk_buff *skb2 = skb_copy(skb, GFP_ATOMIC); | 4248 | struct sk_buff *skb2 = skb_copy(skb, GFP_ATOMIC); |
4249 | struct ethhdr *eth_data; | 4249 | struct ethhdr *eth_data; |
@@ -4259,7 +4259,11 @@ static void bond_activebackup_xmit_copy(struct sk_buff *skb, | |||
4259 | skb2->mac.raw = (unsigned char *)skb2->data; | 4259 | skb2->mac.raw = (unsigned char *)skb2->data; |
4260 | eth_data = eth_hdr(skb2); | 4260 | eth_data = eth_hdr(skb2); |
4261 | 4261 | ||
4262 | /* Pick an appropriate source MAC address */ | 4262 | /* Pick an appropriate source MAC address |
4263 | * -- use slave's perm MAC addr, unless used by bond | ||
4264 | * -- otherwise, borrow active slave's perm MAC addr | ||
4265 | * since that will not be used | ||
4266 | */ | ||
4263 | hwaddr = slave->perm_hwaddr; | 4267 | hwaddr = slave->perm_hwaddr; |
4264 | if (!memcmp(eth_data->h_source, hwaddr, ETH_ALEN)) | 4268 | if (!memcmp(eth_data->h_source, hwaddr, ETH_ALEN)) |
4265 | hwaddr = bond->curr_active_slave->perm_hwaddr; | 4269 | hwaddr = bond->curr_active_slave->perm_hwaddr; |