***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