[ofa-general] A question about tx lock in ipoib_flush_paths
Yossi Etigin
yosefe at voltaire.com
Fri Jul 3 07:43:25 PDT 2009
In ipoib_flush_paths(), we take the netif_tx_lock to remove a path
My question is - what data does this lock protect?
It isn't path->list and path->rb_node, because priv->lock is enough to protect them.
It might be neigh and neigh->ah, to avoid freeing the neighbour and its address
handle while ipoib_start_xmit() is using it, but this particular part is done *outside*
the tx lock.
Unless I'm missing something - shouldn't the code:
spin_unlock_irqrestore(&priv->lock, flags);
netif_tx_unlock_bh(dev);
wait_for_completion(&path->done);
release >> path_free(dev, path);
lock >> netif_tx_lock_bh(dev);
spin_lock_irqsave(&priv->lock, flags);
Be like this:
spin_unlock_irqrestore(&priv->lock, flags);
netif_tx_unlock_bh(dev);
wait_for_completion(&path->done);
lock >> netif_tx_lock_bh(dev);
release >> path_free(dev, path);
spin_lock_irqsave(&priv->lock, flags);
-Yossi
More information about the general
mailing list