IPoIB: Do not join broadcast group if interface is brought down
Because the ipoib_workqueue is not flushed when ipoib interface is brought down, ipoib_mcast_join() may trigger a join to the broadcast group after priv->broadcast was set to NULL (during cleanup). This will cause the system to be a member of the broadcast group when interface is down. As a side effect, this breaks the optimization of setting the Q_key only when joining the broadcast group. Signed-off-by: Yossi Etigin <yosefe@voltaire.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
a50df398cd
commit
50df48f59d
1 changed files with 3 additions and 0 deletions
|
@ -529,6 +529,9 @@ void ipoib_mcast_join_task(struct work_struct *work)
|
||||||
if (!priv->broadcast) {
|
if (!priv->broadcast) {
|
||||||
struct ipoib_mcast *broadcast;
|
struct ipoib_mcast *broadcast;
|
||||||
|
|
||||||
|
if (!test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
|
||||||
|
return;
|
||||||
|
|
||||||
broadcast = ipoib_mcast_alloc(dev, 1);
|
broadcast = ipoib_mcast_alloc(dev, 1);
|
||||||
if (!broadcast) {
|
if (!broadcast) {
|
||||||
ipoib_warn(priv, "failed to allocate broadcast group\n");
|
ipoib_warn(priv, "failed to allocate broadcast group\n");
|
||||||
|
|
Reference in a new issue