IPoIB: Fix AH leak at interface down

When ipoib_stop() is called it first calls netif_stop_queue() to stop
the kernel from passing more packets to the network driver. However,
the completion handler may call netif_wake_queue() re-enabling packet
transfer.

This might result in leaks (we see AH leaks which we think can be
attributed to this bug) as new packets get posted while the interface
is going down.

Signed-off-by: Eli Cohen <eli@mellanox.co.il>
Signed-off-by: Michael Tsirkin <mst@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>

authored by

Eli Cohen and committed by
Roland Dreier
959eb392 672c6108

+1
+1
drivers/infiniband/ulp/ipoib/ipoib_ib.c
··· 275 275 spin_lock_irqsave(&priv->tx_lock, flags); 276 276 ++priv->tx_tail; 277 277 if (netif_queue_stopped(dev) && 278 + test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags) && 278 279 priv->tx_head - priv->tx_tail <= ipoib_sendq_size >> 1) 279 280 netif_wake_queue(dev); 280 281 spin_unlock_irqrestore(&priv->tx_lock, flags);