diff options
author | Ursula Braun <ursula.braun@de.ibm.com> | 2012-11-12 18:05:17 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-13 14:31:21 -0500 |
commit | 7702745b15128e5f0659693736a864e35be1c807 (patch) | |
tree | a320039df9eada1b88a5b7bf8ed7bd109c6b289e /drivers/s390/net | |
parent | a134884ac0e9fa48786560d49ed49c5f5f686410 (diff) |
qeth: set new mac even if old mac is gone
If the set_mac_address() function of qeth is invoked, qeth deletes
the old mac address first on OSA. Only if deletion returns
successfully the new mac address is set on OSA. Deletion may return
with a return value "MAC not found on OSA". In this case qeth
should continue setting the new mac address.
When the OSA cable is pulled, OSA forgets any set mac address. If
the OSA network interface acts as a slave to a bonding master
interface, bonding can invoke the set_mac_address function for
failover purposes and depends on successful setting of the new mac
address even though the old mac address could no longer be deleted.
Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/s390/net')
-rw-r--r-- | drivers/s390/net/qeth_l2_main.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c index 84e8f1d4d216..fddb62654b6a 100644 --- a/drivers/s390/net/qeth_l2_main.c +++ b/drivers/s390/net/qeth_l2_main.c | |||
@@ -679,7 +679,7 @@ static int qeth_l2_set_mac_address(struct net_device *dev, void *p) | |||
679 | return -ERESTARTSYS; | 679 | return -ERESTARTSYS; |
680 | } | 680 | } |
681 | rc = qeth_l2_send_delmac(card, &card->dev->dev_addr[0]); | 681 | rc = qeth_l2_send_delmac(card, &card->dev->dev_addr[0]); |
682 | if (!rc) | 682 | if (!rc || (rc == IPA_RC_L2_MAC_NOT_FOUND)) |
683 | rc = qeth_l2_send_setmac(card, addr->sa_data); | 683 | rc = qeth_l2_send_setmac(card, addr->sa_data); |
684 | return rc ? -EINVAL : 0; | 684 | return rc ? -EINVAL : 0; |
685 | } | 685 | } |