mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 17:41:44 +00:00
IPoIB: Make sure no receives are handled when stopping device
The current IPoIB code might process receive completions from ipoib_drain_cq() when bringing down the interface. This could cause packets to be passed up the stack without the device's poll method being called. Avoid this by setting the status of any successful completions to IB_WC_WR_FLUSH_ERR. Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
e54664c095
commit
ce423ef50e
@ -558,6 +558,14 @@ void ipoib_drain_cq(struct net_device *dev)
|
||||
do {
|
||||
n = ib_poll_cq(priv->cq, IPOIB_NUM_WC, priv->ibwc);
|
||||
for (i = 0; i < n; ++i) {
|
||||
/*
|
||||
* Convert any successful completions to flush
|
||||
* errors to avoid passing packets up the
|
||||
* stack after bringing the device down.
|
||||
*/
|
||||
if (priv->ibwc[i].status == IB_WC_SUCCESS)
|
||||
priv->ibwc[i].status = IB_WC_WR_FLUSH_ERR;
|
||||
|
||||
if (priv->ibwc[i].wr_id & IPOIB_CM_OP_SRQ)
|
||||
ipoib_cm_handle_rx_wc(dev, priv->ibwc + i);
|
||||
else if (priv->ibwc[i].wr_id & IPOIB_OP_RECV)
|
||||
|
Loading…
Reference in New Issue
Block a user