|
@@ -1203,6 +1203,9 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc)
|
|
|
struct list_head *head = &asoc->peer.transport_addr_list;
|
|
|
struct list_head *pos;
|
|
|
|
|
|
+ if (asoc->peer.transport_count == 1)
|
|
|
+ return;
|
|
|
+
|
|
|
/* Find the next transport in a round-robin fashion. */
|
|
|
t = asoc->peer.retran_path;
|
|
|
pos = &t->transports;
|
|
@@ -1217,6 +1220,15 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc)
|
|
|
|
|
|
t = list_entry(pos, struct sctp_transport, transports);
|
|
|
|
|
|
+ /* We have exhausted the list, but didn't find any
|
|
|
+ * other active transports. If so, use the next
|
|
|
+ * transport.
|
|
|
+ */
|
|
|
+ if (t == asoc->peer.retran_path) {
|
|
|
+ t = next;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
/* Try to find an active transport. */
|
|
|
|
|
|
if ((t->state == SCTP_ACTIVE) ||
|
|
@@ -1229,15 +1241,6 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc)
|
|
|
if (!next)
|
|
|
next = t;
|
|
|
}
|
|
|
-
|
|
|
- /* We have exhausted the list, but didn't find any
|
|
|
- * other active transports. If so, use the next
|
|
|
- * transport.
|
|
|
- */
|
|
|
- if (t == asoc->peer.retran_path) {
|
|
|
- t = next;
|
|
|
- break;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
asoc->peer.retran_path = t;
|