If two or more instances of 'ip link set' commands race and first one
already brings the interface up (or down), the subsequent instances
can simply return without redoing the up/down operation.
Fixes: ed651a10875f ("ibmvnic: Updated reset handling")
Reported-by: Abdul Haleem <[email protected]>
Tested-by: Abdul Haleem <[email protected]>
Signed-off-by: Sukadev Bhattiprolu <[email protected]>
---
Changelog[v2] For consistency with ibmvnic_open() use "goto out" and return
from end of function.
---
drivers/net/ethernet/ibm/ibmvnic.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c
b/drivers/net/ethernet/ibm/ibmvnic.c
index 78d244aeee69..df1b4884b4e8 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1219,6 +1219,14 @@ static int ibmvnic_open(struct net_device *netdev)
goto out;
}
+ /* If adapter is already open, we don't have to do anything. */
+ if (adapter->state == VNIC_OPEN) {
+ netdev_dbg(netdev, "[S:%d] adapter already open\n",
+ adapter->state);
+ rc = 0;
+ goto out;
+ }
+
if (adapter->state != VNIC_CLOSED) {
rc = ibmvnic_login(netdev);
if (rc)
@@ -1392,6 +1400,12 @@ static int ibmvnic_close(struct net_device *netdev)
return 0;
}
+ /* If adapter is already closed, we don't have to do anything. */
+ if (adapter->state == VNIC_CLOSED) {
+ netdev_dbg(netdev, "[S:%d] adapter already closed\n",
+ adapter->state);
+ return 0;
+ }
rc = __ibmvnic_close(netdev);
ibmvnic_cleanup(netdev);
--
2.26.2