|
@@ -175,7 +175,9 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
|
|
|
|
|
|
mcast->mcmember = *mcmember;
|
|
|
|
|
|
- /* Set the cached Q_Key before we attach if it's the broadcast group */
|
|
|
+ /* Set the multicast MTU and cached Q_Key before we attach if it's
|
|
|
+ * the broadcast group.
|
|
|
+ */
|
|
|
if (!memcmp(mcast->mcmember.mgid.raw, priv->dev->broadcast + 4,
|
|
|
sizeof (union ib_gid))) {
|
|
|
spin_lock_irq(&priv->lock);
|
|
@@ -183,10 +185,17 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
|
|
|
spin_unlock_irq(&priv->lock);
|
|
|
return -EAGAIN;
|
|
|
}
|
|
|
+ priv->mcast_mtu = IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
|
|
|
priv->qkey = be32_to_cpu(priv->broadcast->mcmember.qkey);
|
|
|
spin_unlock_irq(&priv->lock);
|
|
|
priv->tx_wr.wr.ud.remote_qkey = priv->qkey;
|
|
|
set_qkey = 1;
|
|
|
+
|
|
|
+ if (!ipoib_cm_admin_enabled(dev)) {
|
|
|
+ rtnl_lock();
|
|
|
+ dev_set_mtu(dev, min(priv->mcast_mtu, priv->admin_mtu));
|
|
|
+ rtnl_unlock();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (!test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags)) {
|
|
@@ -574,14 +583,6 @@ void ipoib_mcast_join_task(struct work_struct *work)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- priv->mcast_mtu = IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
|
|
|
-
|
|
|
- if (!ipoib_cm_admin_enabled(dev)) {
|
|
|
- rtnl_lock();
|
|
|
- dev_set_mtu(dev, min(priv->mcast_mtu, priv->admin_mtu));
|
|
|
- rtnl_unlock();
|
|
|
- }
|
|
|
-
|
|
|
ipoib_dbg_mcast(priv, "successfully joined all multicast groups\n");
|
|
|
|
|
|
clear_bit(IPOIB_MCAST_RUN, &priv->flags);
|