aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c13
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);