[ofa-general] Re: [PATCH] IB/ipoib: Do not turn on carrier to a non active port

Roland Dreier rdreier at cisco.com
Thu Sep 17 08:50:18 PDT 2009


And by the way, this current patch has a deadlock I think:

 > @@ -724,6 +724,8 @@ int ipoib_ib_dev_down(struct net_device *dev, int flush)
 >  	ipoib_dbg(priv, "downing ib_dev\n");
 >  
 >  	clear_bit(IPOIB_FLAG_OPER_UP, &priv->flags);
 > +	cancel_delayed_work(&priv->carrier_on_task);

ipoib_ib_dev_down() is called with rtnl held but carrier_on_task() does
rtn_lock().  So if carrier_on_task() is running but about to take the
rtnl when we try to do cancel_delayed_work() here, then it will wait
forever.

I think using lockdep on a new enough kernel (2.6.30 or maybe 2.6.31)
will report workqueue / timer vs. lock deadlocks.

 - R.





More information about the general mailing list