Revert "IPoIB: Make the carrier_on_task race aware"
This reverts commit 67d7209e1f
.
The series of IPoIB bug fixes that went into 3.19-rc1 introduce
regressions, and after trying to sort things out, we decided to revert
to 3.18's IPoIB driver and get things right for 3.20.
Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
e7a623d2df
commit
c6a7ec7a0f
1 changed files with 6 additions and 15 deletions
|
@ -353,27 +353,18 @@ void ipoib_mcast_carrier_on_task(struct work_struct *work)
|
||||||
carrier_on_task);
|
carrier_on_task);
|
||||||
struct ib_port_attr attr;
|
struct ib_port_attr attr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take rtnl_lock to avoid racing with ipoib_stop() and
|
||||||
|
* turning the carrier back on while a device is being
|
||||||
|
* removed.
|
||||||
|
*/
|
||||||
if (ib_query_port(priv->ca, priv->port, &attr) ||
|
if (ib_query_port(priv->ca, priv->port, &attr) ||
|
||||||
attr.state != IB_PORT_ACTIVE) {
|
attr.state != IB_PORT_ACTIVE) {
|
||||||
ipoib_dbg(priv, "Keeping carrier off until IB port is active\n");
|
ipoib_dbg(priv, "Keeping carrier off until IB port is active\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
rtnl_lock();
|
||||||
* Take rtnl_lock to avoid racing with ipoib_stop() and
|
|
||||||
* turning the carrier back on while a device is being
|
|
||||||
* removed. However, ipoib_stop() will attempt to flush
|
|
||||||
* the workqueue while holding the rtnl lock, so loop
|
|
||||||
* on trylock until either we get the lock or we see
|
|
||||||
* FLAG_ADMIN_UP go away as that signals that we are bailing
|
|
||||||
* and can safely ignore the carrier on work
|
|
||||||
*/
|
|
||||||
while (!rtnl_trylock()) {
|
|
||||||
if (!test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
msleep(20);
|
|
||||||
}
|
|
||||||
if (!ipoib_cm_admin_enabled(priv->dev))
|
if (!ipoib_cm_admin_enabled(priv->dev))
|
||||||
dev_set_mtu(priv->dev, min(priv->mcast_mtu, priv->admin_mtu));
|
dev_set_mtu(priv->dev, min(priv->mcast_mtu, priv->admin_mtu));
|
||||||
netif_carrier_on(priv->dev);
|
netif_carrier_on(priv->dev);
|
||||||
|
|
Loading…
Add table
Reference in a new issue