IPoIB: reinitialize path struct's completion for every query
authorRoland Dreier <rolandd@cisco.com>
Tue, 29 Nov 2005 05:20:34 +0000 (21:20 -0800)
committerRoland Dreier <rolandd@cisco.com>
Tue, 29 Nov 2005 05:20:34 +0000 (21:20 -0800)
It's possible that IPoIB will issue multiple SA queries for the same
path struct.  Therefore the struct's completion needs to be
initialized for each query rather than only once when the struct is
allocated, or else we might not wait long enough for later queries to
finish and free the path struct too soon.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/ipoib/ipoib_main.c

index 2fa30751f3623f52bfab28595ab667fe4f1ed91b..cd58b3ddd9c4f91e893bf9a4984fc8900f7fab83 100644 (file)
@@ -428,7 +428,6 @@ static struct ipoib_path *path_rec_create(struct net_device *dev,
        skb_queue_head_init(&path->queue);
 
        INIT_LIST_HEAD(&path->neigh_list);
-       init_completion(&path->done);
 
        memcpy(path->pathrec.dgid.raw, gid->raw, sizeof (union ib_gid));
        path->pathrec.sgid      = priv->local_gid;
@@ -446,6 +445,8 @@ static int path_rec_start(struct net_device *dev,
        ipoib_dbg(priv, "Start path record lookup for " IPOIB_GID_FMT "\n",
                  IPOIB_GID_ARG(path->pathrec.dgid));
 
+       init_completion(&path->done);
+
        path->query_id =
                ib_sa_path_rec_get(priv->ca, priv->port,
                                   &path->pathrec,