[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