> 
> Yes, that looks like an obvious mistake.  I checked this in:
>
> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c
b/drivers/infiniband/ulp/ipoib/ipoib_main.c
> index 1633aad..00342d5 100644
> --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
> +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
> @@ -519,12 +519,10 @@ static void neigh_add_path(struct sk_buf
>                          be32_to_cpup((__be32 *)
skb->dst->neighbour->ha));
>       } else {
>               neigh->ah  = NULL;
> -             if (skb_queue_len(&neigh->queue) <
IPOIB_MAX_PATH_REC_QUEUE) {
> +             if (skb_queue_len(&neigh->queue) <
IPOIB_MAX_PATH_REC_QUEUE)
>                       __skb_queue_tail(&neigh->queue, skb);
> -             } else {
> -                     ++priv->stats.tx_dropped;
> -                     dev_kfree_skb_any(skb);
> -             }
> +             else
> +                     goto err_list;
>  
>               if (!path->query && path_rec_start(dev, path))
>                       goto err;

Doing it this way may result in having an ipoib_path object for which
the query is not complete. I think if the queue is full you should do
cleanup but still execute 
if (!path->query && path_rec_start(dev, path))
                        goto err;

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to