IPoIB: Fix hang in ipoib_flush_paths()

ipoib_flush_paths() can hang during an SM up/down loop: if
path_rec_start() fails (for instance, because there is no sm_ah), the
path is still added to the path list by neigh_add_path(). Then,
ipoib_flush_paths() will wait for path->done, but it will never
complete because the request was not issued at all. Fix this by
completing path->done if issuing the query fails.

This fixes <https://bugs.openfabrics.org/show_bug.cgi?id=1329>.

Signed-off-by: Yossi Etigin <yosefe@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>

authored by Yossi Etigin and committed by Roland Dreier 93a3ab93 fe25c561

+1
+1
drivers/infiniband/ulp/ipoib/ipoib_main.c
··· 547 547 if (path->query_id < 0) { 548 548 ipoib_warn(priv, "ib_sa_path_rec_get failed: %d\n", path->query_id); 549 549 path->query = NULL; 550 + complete(&path->done); 550 551 return path->query_id; 551 552 } 552 553