RxRPC: Don't attempt to reuse aborted connections
[sfrench/cifs-2.6.git] / net / rxrpc / ar-connection.c
index 67e38a056240df73712c56a0ba81ddc5a645626b..9f1ce841a0bbcd348e83c7ad518649079e95c357 100644 (file)
@@ -444,6 +444,11 @@ int rxrpc_connect_call(struct rxrpc_sock *rx,
                        conn = list_entry(bundle->avail_conns.next,
                                          struct rxrpc_connection,
                                          bundle_link);
+                       if (conn->state >= RXRPC_CONN_REMOTELY_ABORTED) {
+                               list_del_init(&conn->bundle_link);
+                               bundle->num_conns--;
+                               continue;
+                       }
                        if (--conn->avail_calls == 0)
                                list_move(&conn->bundle_link,
                                          &bundle->busy_conns);
@@ -461,6 +466,11 @@ int rxrpc_connect_call(struct rxrpc_sock *rx,
                        conn = list_entry(bundle->unused_conns.next,
                                          struct rxrpc_connection,
                                          bundle_link);
+                       if (conn->state >= RXRPC_CONN_REMOTELY_ABORTED) {
+                               list_del_init(&conn->bundle_link);
+                               bundle->num_conns--;
+                               continue;
+                       }
                        ASSERTCMP(conn->avail_calls, ==, RXRPC_MAXCALLS);
                        conn->avail_calls = RXRPC_MAXCALLS - 1;
                        ASSERT(conn->channels[0] == NULL &&