From: Roland Dreier Date: Mon, 25 Feb 2013 17:42:15 +0000 (-0800) Subject: IPoIB: Free ipoib neigh on path record failure so path rec queries are retried X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=f72dd56690aba26fc87fc64e98dd4cc66f27122c;p=openwrt%2Fstaging%2Fblogic.git 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 --- diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index 66d6da90982f..8534afd04e7c 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/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);