retran_path update bug fix
Subsystems (3)
PATCH 1/1 retran_path update bug fix
If the current retran_path is the only active one, it should update it to the the next inactive one.
Signed-off-by Gui Jianfeng <[email protected]>
--- net/sctp/associola.c | 21 ++++++++++++--------- 1 files changed, 12 insertions(+), 9 deletions(-)
net/sctp/associola.c +12 -9
@@ -1208,6 +1208,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;
@@ -1222,6 +1225,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) ||
@@ -1234,15 +1246,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;
Signature · 1 line
1.5.3