|
@@ -685,15 +685,13 @@ int ipoib_ib_dev_open(struct net_device *dev)
|
|
|
ret = ipoib_ib_post_receives(dev);
|
|
|
if (ret) {
|
|
|
ipoib_warn(priv, "ipoib_ib_post_receives returned %d\n", ret);
|
|
|
- ipoib_ib_dev_stop(dev, 1);
|
|
|
- return -1;
|
|
|
+ goto dev_stop;
|
|
|
}
|
|
|
|
|
|
ret = ipoib_cm_dev_open(dev);
|
|
|
if (ret) {
|
|
|
ipoib_warn(priv, "ipoib_cm_dev_open returned %d\n", ret);
|
|
|
- ipoib_ib_dev_stop(dev, 1);
|
|
|
- return -1;
|
|
|
+ goto dev_stop;
|
|
|
}
|
|
|
|
|
|
clear_bit(IPOIB_STOP_REAPER, &priv->flags);
|
|
@@ -704,6 +702,11 @@ int ipoib_ib_dev_open(struct net_device *dev)
|
|
|
napi_enable(&priv->napi);
|
|
|
|
|
|
return 0;
|
|
|
+dev_stop:
|
|
|
+ if (!test_and_set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
|
|
|
+ napi_enable(&priv->napi);
|
|
|
+ ipoib_ib_dev_stop(dev, 1);
|
|
|
+ return -1;
|
|
|
}
|
|
|
|
|
|
static void ipoib_pkey_dev_check_presence(struct net_device *dev)
|