diff options
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_main.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index 176b3dfb49c3..7cad4dd87469 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c | |||
| @@ -640,8 +640,10 @@ static void neigh_add_path(struct sk_buff *skb, u8 *daddr, | |||
| 640 | 640 | ||
| 641 | if (!path->query && path_rec_start(dev, path)) | 641 | if (!path->query && path_rec_start(dev, path)) |
| 642 | goto err_path; | 642 | goto err_path; |
| 643 | 643 | if (skb_queue_len(&neigh->queue) < IPOIB_MAX_PATH_REC_QUEUE) | |
| 644 | __skb_queue_tail(&neigh->queue, skb); | 644 | __skb_queue_tail(&neigh->queue, skb); |
| 645 | else | ||
| 646 | goto err_drop; | ||
| 645 | } | 647 | } |
| 646 | 648 | ||
| 647 | spin_unlock_irqrestore(&priv->lock, flags); | 649 | spin_unlock_irqrestore(&priv->lock, flags); |
| @@ -676,7 +678,12 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev, | |||
| 676 | new_path = 1; | 678 | new_path = 1; |
| 677 | } | 679 | } |
| 678 | if (path) { | 680 | if (path) { |
| 679 | __skb_queue_tail(&path->queue, skb); | 681 | if (skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) { |
| 682 | __skb_queue_tail(&path->queue, skb); | ||
| 683 | } else { | ||
| 684 | ++dev->stats.tx_dropped; | ||
| 685 | dev_kfree_skb_any(skb); | ||
| 686 | } | ||
| 680 | 687 | ||
| 681 | if (!path->query && path_rec_start(dev, path)) { | 688 | if (!path->query && path_rec_start(dev, path)) { |
| 682 | spin_unlock_irqrestore(&priv->lock, flags); | 689 | spin_unlock_irqrestore(&priv->lock, flags); |
