***SPAM*** Re: [ofa-general] [PATCH] IB/IPoIB: Decrease the time that invalid paths stay useless
Yossi Etigin
yossi.openib at gmail.com
Fri Dec 5 03:06:22 PST 2008
> @@ -360,12 +360,15 @@ void ipoib_mark_paths_invalid(struct net_device *dev)
> spin_lock_irq(&priv->lock);
>
> list_for_each_entry_safe(path, tp, &priv->path_list, list) {
> - ipoib_dbg(priv, "mark path LID 0x%04x GID " IPOIB_GID_FMT " invalid\n",
> + ipoib_dbg(priv, "mark path LID 0x%04x GID " IPOIB_GID_FMT " stale\n",
> be16_to_cpu(path->pathrec.dlid),
> IPOIB_GID_ARG(path->pathrec.dgid));
> - path->valid = 0;
> + path->stale = 1;
> }
>
> + if (!list_empty(&priv->path_list))
> + queue_delayed_work(ipoib_workqueue, &priv->path_refresh_task,
> + round_jiffies_relative(HZ));
> spin_unlock_irq(&priv->lock);
> }
>
What if there is already an outstanding path query on one
of the paths you mark stale?
ipoib_refresh_paths() will issue another query, making it two
queries on the same path. Then, if you bring the device
down (call ipoib_flush_paths()) it will wait for completion
of one query, causing a crash.
More information about the general
mailing list