diff options
Diffstat (limited to 'drivers/infiniband/ulp/ipoib/ipoib_main.c')
-rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_main.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index 2fa30751f362..475d98fa9e26 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c | |||
@@ -94,8 +94,10 @@ int ipoib_open(struct net_device *dev) | |||
94 | if (ipoib_ib_dev_open(dev)) | 94 | if (ipoib_ib_dev_open(dev)) |
95 | return -EINVAL; | 95 | return -EINVAL; |
96 | 96 | ||
97 | if (ipoib_ib_dev_up(dev)) | 97 | if (ipoib_ib_dev_up(dev)) { |
98 | ipoib_ib_dev_stop(dev); | ||
98 | return -EINVAL; | 99 | return -EINVAL; |
100 | } | ||
99 | 101 | ||
100 | if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) { | 102 | if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) { |
101 | struct ipoib_dev_priv *cpriv; | 103 | struct ipoib_dev_priv *cpriv; |
@@ -398,9 +400,9 @@ static void path_rec_completion(int status, | |||
398 | while ((skb = __skb_dequeue(&neigh->queue))) | 400 | while ((skb = __skb_dequeue(&neigh->queue))) |
399 | __skb_queue_tail(&skqueue, skb); | 401 | __skb_queue_tail(&skqueue, skb); |
400 | } | 402 | } |
401 | } else | 403 | } |
402 | path->query = NULL; | ||
403 | 404 | ||
405 | path->query = NULL; | ||
404 | complete(&path->done); | 406 | complete(&path->done); |
405 | 407 | ||
406 | spin_unlock_irqrestore(&priv->lock, flags); | 408 | spin_unlock_irqrestore(&priv->lock, flags); |
@@ -428,7 +430,6 @@ static struct ipoib_path *path_rec_create(struct net_device *dev, | |||
428 | skb_queue_head_init(&path->queue); | 430 | skb_queue_head_init(&path->queue); |
429 | 431 | ||
430 | INIT_LIST_HEAD(&path->neigh_list); | 432 | INIT_LIST_HEAD(&path->neigh_list); |
431 | init_completion(&path->done); | ||
432 | 433 | ||
433 | memcpy(path->pathrec.dgid.raw, gid->raw, sizeof (union ib_gid)); | 434 | memcpy(path->pathrec.dgid.raw, gid->raw, sizeof (union ib_gid)); |
434 | path->pathrec.sgid = priv->local_gid; | 435 | path->pathrec.sgid = priv->local_gid; |
@@ -446,6 +447,8 @@ static int path_rec_start(struct net_device *dev, | |||
446 | ipoib_dbg(priv, "Start path record lookup for " IPOIB_GID_FMT "\n", | 447 | ipoib_dbg(priv, "Start path record lookup for " IPOIB_GID_FMT "\n", |
447 | IPOIB_GID_ARG(path->pathrec.dgid)); | 448 | IPOIB_GID_ARG(path->pathrec.dgid)); |
448 | 449 | ||
450 | init_completion(&path->done); | ||
451 | |||
449 | path->query_id = | 452 | path->query_id = |
450 | ib_sa_path_rec_get(priv->ca, priv->port, | 453 | ib_sa_path_rec_get(priv->ca, priv->port, |
451 | &path->pathrec, | 454 | &path->pathrec, |