Subject: Re: [ofa-general] Re: [PATCH V5 2/11] IB/ipoib: Notify the world before doing unregister

From: Roland Dreier <[email-masked]>
Date: Sun, 23 Sep 2007 09:34:46 -0700

> The action in bonding to a detach of slave is to unregister the master (see patch 10).
 > This can't be done from the context of unregister_netdevice itself (it is protected by rtnl_lock).

I'm confused.  Your patch has:

 > +		ipoib_slave_detach(cpriv->dev);
 >  		unregister_netdev(cpriv->dev);

And ipoib_slave_detach() is:

 > +static inline void ipoib_slave_detach(struct net_device *dev)
 > +{
 > +	rtnl_lock();
 > +	netdev_slave_detach(dev);
 > +	rtnl_unlock();
 > +}

so you are calling netdev_slave_detach() with the rtnl lock held.
Why can't you make the same call from the start of unregister_netdevice()?

Anyway, if the rtnl lock is a problem, can you just add the call to
netdev_slave_detach() to unregister_netdev() before it takes the rtnl lock?

 - R.