IPoIB: reinitialize mcast structs' completions for every query
authorMichael S. Tsirkin <mst@mellanox.co.il>
Tue, 29 Nov 2005 18:18:45 +0000 (10:18 -0800)
committerRoland Dreier <rolandd@cisco.com>
Tue, 29 Nov 2005 18:18:45 +0000 (10:18 -0800)
Make sure mcast->done is initialized to uncompleted value before we
submit a new query, so that it's safe to wait on.

Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/ipoib/ipoib_multicast.c

index c33ed87f9dff5c2efdf04ed6a4352e3bea5af950..10404e09d1ef9be56053a9512c54d45dfc8caa22 100644 (file)
@@ -135,8 +135,6 @@ static struct ipoib_mcast *ipoib_mcast_alloc(struct net_device *dev,
        if (!mcast)
                return NULL;
 
-       init_completion(&mcast->done);
-
        mcast->dev = dev;
        mcast->created = jiffies;
        mcast->backoff = 1;
@@ -350,6 +348,8 @@ static int ipoib_mcast_sendonly_join(struct ipoib_mcast *mcast)
        rec.port_gid = priv->local_gid;
        rec.pkey     = cpu_to_be16(priv->pkey);
 
+       init_completion(&mcast->done);
+
        ret = ib_sa_mcmember_rec_set(priv->ca, priv->port, &rec,
                                     IB_SA_MCMEMBER_REC_MGID            |
                                     IB_SA_MCMEMBER_REC_PORT_GID        |
@@ -469,6 +469,8 @@ static void ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast,
                rec.traffic_class = priv->broadcast->mcmember.traffic_class;
        }
 
+       init_completion(&mcast->done);
+
        ret = ib_sa_mcmember_rec_set(priv->ca, priv->port, &rec, comp_mask,
                                     mcast->backoff * 1000, GFP_ATOMIC,
                                     ipoib_mcast_join_complete,