|
@@ -106,23 +106,17 @@ int ipoib_open(struct net_device *dev)
|
|
|
|
|
|
ipoib_dbg(priv, "bringing up interface\n");
|
|
|
|
|
|
- set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
|
|
|
+ if (!test_and_set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
|
|
|
+ napi_enable(&priv->napi);
|
|
|
|
|
|
if (ipoib_pkey_dev_delay_open(dev))
|
|
|
return 0;
|
|
|
|
|
|
- napi_enable(&priv->napi);
|
|
|
+ if (ipoib_ib_dev_open(dev))
|
|
|
+ goto err_disable;
|
|
|
|
|
|
- if (ipoib_ib_dev_open(dev)) {
|
|
|
- napi_disable(&priv->napi);
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- if (ipoib_ib_dev_up(dev)) {
|
|
|
- ipoib_ib_dev_stop(dev, 1);
|
|
|
- napi_disable(&priv->napi);
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
+ if (ipoib_ib_dev_up(dev))
|
|
|
+ goto err_stop;
|
|
|
|
|
|
if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
|
|
|
struct ipoib_dev_priv *cpriv;
|
|
@@ -144,6 +138,15 @@ int ipoib_open(struct net_device *dev)
|
|
|
netif_start_queue(dev);
|
|
|
|
|
|
return 0;
|
|
|
+
|
|
|
+err_stop:
|
|
|
+ ipoib_ib_dev_stop(dev, 1);
|
|
|
+
|
|
|
+err_disable:
|
|
|
+ napi_disable(&priv->napi);
|
|
|
+ clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
|
|
|
+
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
|
|
|
static int ipoib_stop(struct net_device *dev)
|