IPoIB: Don't turn on carrier for a non-active port
authorMoni Shoua <monis@Voltaire.COM>
Thu, 24 Sep 2009 19:01:05 +0000 (12:01 -0700)
committerRoland Dreier <rolandd@cisco.com>
Thu, 24 Sep 2009 19:01:05 +0000 (12:01 -0700)
commit5ee95120841fd623c48d7d971182cf58e3b0c8de
tree512953a68b5c8e39ae16166aeace89fbcc605123
parent86d710146fb9975f04c505ec78caa43d227c1018
IPoIB: Don't turn on carrier for a non-active port

Multicast joins can succeed even if the IB port is down.  This happens
when the SM runs on the same port with the requesting port.  However,
IPoIB calls netif_carrier_on() when the join of the broadcast group
succeeds, without caring about the state of the IB port.  The result
is an IPoIB interface in RUNNING state but without an active IB port
to support it.

If a bonding interface uses this IPoIB interface as a slave it might
not detect that this slave is almost useless and failover
functionality will be damaged.  The fix checks the state of the IB
port in the carrier_task before calling netif_carrier_on().

Adresses: https://bugs.openfabrics.org/show_bug.cgi?id=1726
Signed-off-by: Moni Shoua <monis@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/ipoib/ipoib_multicast.c