提交 ec229e5e 编写于 作者: P Pradeep Satyanarayana 提交者: Roland Dreier

IPoIB/cm: Fix ipoib_cm_dev_stop() cleanup when drain times out

Commit efcd9971 ("IPoIB/cm: Factor out ipoib_cm_free_rx_reap_list()")
introduced a bug in ipoib_cm_dev_stop() when the receive drain times
out.  In that case, the function moves all the pending rx stuff into a
private list but then calls ipoib_cm_free_rx_reap_list(), which
handles a different list.

Fix this by moving everything to the rx_reap_list that will actually
get freed up.

This fixes <https://bugs.openfabrics.org/show_bug.cgi?id=906>.
Signed-off-by: NPradeep Satyanarayana <pradeeps@linux.vnet.ibm.com>
Signed-off-by: NRoland Dreier <rolandd@cisco.com>
上级 9a4c8546
...@@ -824,7 +824,6 @@ void ipoib_cm_dev_stop(struct net_device *dev) ...@@ -824,7 +824,6 @@ void ipoib_cm_dev_stop(struct net_device *dev)
struct ipoib_dev_priv *priv = netdev_priv(dev); struct ipoib_dev_priv *priv = netdev_priv(dev);
struct ipoib_cm_rx *p; struct ipoib_cm_rx *p;
unsigned long begin; unsigned long begin;
LIST_HEAD(list);
int ret; int ret;
if (!IPOIB_CM_SUPPORTED(dev->dev_addr) || !priv->cm.id) if (!IPOIB_CM_SUPPORTED(dev->dev_addr) || !priv->cm.id)
...@@ -857,9 +856,12 @@ void ipoib_cm_dev_stop(struct net_device *dev) ...@@ -857,9 +856,12 @@ void ipoib_cm_dev_stop(struct net_device *dev)
/* /*
* assume the HW is wedged and just free up everything. * assume the HW is wedged and just free up everything.
*/ */
list_splice_init(&priv->cm.rx_flush_list, &list); list_splice_init(&priv->cm.rx_flush_list,
list_splice_init(&priv->cm.rx_error_list, &list); &priv->cm.rx_reap_list);
list_splice_init(&priv->cm.rx_drain_list, &list); list_splice_init(&priv->cm.rx_error_list,
&priv->cm.rx_reap_list);
list_splice_init(&priv->cm.rx_drain_list,
&priv->cm.rx_reap_list);
break; break;
} }
spin_unlock_irq(&priv->lock); spin_unlock_irq(&priv->lock);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册