ipoib_mcast_free() dequeues SKBs pending on the pkt_queue but needs to do that
with netif_tx_lock_bh() acquired.

Signed-off-by: Eli Cohen <e...@mellanox.co.il>
---

I saw the following bug appear in ofed 1.4 on RHAS5.2 but have not yet had the
chance to verify that this patch fixes this particular problem but I think this
patch is valid anyway:

Dec 13 04:57:26 mtilab17 kernel: ib0: dev_queue_xmit failed to requeue packet
Dec 13 04:57:36 mtilab17 kernel: ib0: timing out; 63 sends not completed
Dec 13 04:57:36 mtilab17 kernel: Attempt to release alive inet socket 
ffff8102621d3680
Dec 13 04:57:36 mtilab17 kernel: Attempt to release alive inet socket 
ffff81026ba4b0c0
Dec 13 04:57:36 mtilab17 kernel: BUG: warning at 
include/net/dst.h:153/dst_release() (Tainted: G     )
Dec 13 04:57:36 mtilab17 kernel:
Dec 13 04:57:36 mtilab17 kernel: Call Trace:
Dec 13 04:57:36 mtilab17 kernel:  <IRQ>  [<ffffffff800288ef>] 
__kfree_skb+0x47/0x110
Dec 13 04:57:36 mtilab17 kernel:  [<ffffffff885d69ce>] 
:ib_ipoib:ipoib_cm_handle_tx_wc+0xc2/0x228
Dec 13 04:57:36 mtilab17 kernel:  [<ffffffff885cfae2>] 
:ib_ipoib:ipoib_poll+0xaa/0x19e
Dec 13 04:57:36 mtilab17 kernel:  [<ffffffff8000c54c>] net_rx_action+0xa4/0x1a4
Dec 13 04:57:36 mtilab17 kernel:  [<ffffffff8832da0a>] 
:mlx4_core:poll_catas+0x0/0x137
---
 drivers/infiniband/ulp/ipoib/ipoib_multicast.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c 
b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index d9d1223..dd320d5 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -94,12 +94,12 @@ static void ipoib_mcast_free(struct ipoib_mcast *mcast)
        if (mcast->ah)
                ipoib_put_ah(mcast->ah);
 
+       netif_tx_lock_bh(dev);
        while (!skb_queue_empty(&mcast->pkt_queue)) {
                ++tx_dropped;
                dev_kfree_skb_any(skb_dequeue(&mcast->pkt_queue));
        }
 
-       netif_tx_lock_bh(dev);
        dev->stats.tx_dropped += tx_dropped;
        netif_tx_unlock_bh(dev);
 
-- 
1.6.0.5

_______________________________________________
ewg mailing list
ewg@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg

Reply via email to