On Tue, Apr 14, 2015 at 07:30:03PM +0300, Erez Shitrit wrote:It can, at least for ipoib child interface (AKA "vlan"), you can't control the call for that ndo and it can be called before the parent was set.
Agreediff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.cThis will make parent interface to return 0 instead of its own ifindex.
index 657b89b..11ea6e2 100644
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -846,7 +846,10 @@ static int ipoib_get_iflink(const struct net_device *dev)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
- return priv->parent->ifindex;
+ if (priv && priv->parent)
+ return priv->parent->ifindex;
+ else
+ return 0;
I would suggest write something like that:
+ /* parent interface */Like was said for other drivers, I can't see how parent can be null
+ if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags))
+ return dev->ifindex;
+
+ /* child/vlan interface */
+ if (!priv->parent)
+ return -1;
while IPOIB_FLAG_SUBINTERFACE is set. Drop the last if.
Erez, you basically rewrote this, please make a proper patch with the
Fixes and Reported-By credit for Honggang. Lets merge this through
Dave M's tree right away.
Thank you all
Jason
.