@@ -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.
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to