@@ -996,9 +996,14 @@ static int ipoib_cm_rep_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even
while ((skb = __skb_dequeue(&skqueue))) {
skb->dev = p->dev;
- if (dev_queue_xmit(skb))
- ipoib_warn(priv, "dev_queue_xmit failed "
- "to requeue packet\n");
+ if (skb_dst(skb) && skb_dst(skb)->neighbour) {
+ if (dev_queue_xmit(skb))
+ ipoib_warn(priv, "dev_queue_xmit failed "
+ "to requeue packet\n");
+ } else {
+ ++p->dev->stats.tx_dropped;
+ dev_kfree_skb_any(skb);
+ }
}
ret = ib_send_cm_rtu(cm_id, NULL, 0);
@@ -490,9 +490,14 @@ static void path_rec_completion(int status,
while ((skb = __skb_dequeue(&skqueue))) {
skb->dev = dev;
- if (dev_queue_xmit(skb))
- ipoib_warn(priv, "dev_queue_xmit failed "
- "to requeue packet\n");
+ if (skb_dst(skb) && skb_dst(skb)->neighbour) {
+ if (dev_queue_xmit(skb))
+ ipoib_warn(priv, "dev_queue_xmit failed "
+ "to requeue packet\n");
+ } else {
+ ++dev->stats.tx_dropped;
+ dev_kfree_skb_any(skb);
+ }
}
}