Browse Source

IPoIB: Free ipoib neigh on path record failure so path rec queries are retried

If IPoIB fails to look up a path record (eg if it tries during an SM
failover when one SM is dead but the new one hasn't taken over yet), the
driver ends up with a neighbour structure but no address handle (AH).
There's no mechanism to recover from this: any further packets sent to
this destination will be silently dumped in ipoib_start_xmit().

Fix this by freeing the neighbour structures when a path rec query
fails, so that the next packet queued to be sent will trigger a new path
record query.

Signed-off-by: Roland Dreier <roland@purestorage.com>
Roland Dreier 12 years ago
parent
commit
f72dd56690
1 changed files with 3 additions and 0 deletions
  1. 3 0
      drivers/infiniband/ulp/ipoib/ipoib_main.c

+ 3 - 0
drivers/infiniband/ulp/ipoib/ipoib_main.c

@@ -510,6 +510,9 @@ static void path_rec_completion(int status,
 
 	spin_unlock_irqrestore(&priv->lock, flags);
 
+	if (IS_ERR_OR_NULL(ah))
+		ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw);
+
 	if (old_ah)
 		ipoib_put_ah(old_ah);