[openib-general] Re: ipoib error handling question
Eli Cohen
eli at mellanox.co.il
Mon Mar 13 22:53:23 PST 2006
>
> 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;
More information about the general
mailing list