Skip to content

Commit

Permalink
sctp: teach CACC algorithm about removed transports
Browse files Browse the repository at this point in the history
When we have have to remove a transport due to ASCONF, we move
the data to a new active path.  This can trigger CACC algorithm
to not mark that data as missing when SACKs arrive.  This is
because the transport passed to the CACC algorithm is the one
this data is sitting on, not the one it was sent on (that one
may be gone).  So, by sending the original transport (even if
it's NULL), we may start marking data as missing.

Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Vlad Yasevich authored and David S. Miller committed Apr 20, 2011
1 parent 934253a commit f246a7b
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions net/sctp/outqueue.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,8 @@ static inline int sctp_cacc_skip_3_1_d(struct sctp_transport *primary,
static inline int sctp_cacc_skip_3_1_f(struct sctp_transport *transport,
int count_of_newacks)
{
if (count_of_newacks < 2 && !transport->cacc.cacc_saw_newack)
if (count_of_newacks < 2 &&
(transport && !transport->cacc.cacc_saw_newack))
return 1;
return 0;
}
Expand Down Expand Up @@ -618,9 +619,12 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt,

/* If we are retransmitting, we should only
* send a single packet.
* Otherwise, try appending this chunk again.
*/
if (rtx_timeout || fast_rtx)
done = 1;
else
goto redo;

/* Bundle next chunk in the next round. */
break;
Expand Down Expand Up @@ -1683,8 +1687,9 @@ static void sctp_mark_missing(struct sctp_outq *q,
/* SFR-CACC may require us to skip marking
* this chunk as missing.
*/
if (!transport || !sctp_cacc_skip(primary, transport,
count_of_newacks, tsn)) {
if (!transport || !sctp_cacc_skip(primary,
chunk->transport,
count_of_newacks, tsn)) {
chunk->tsn_missing_report++;

SCTP_DEBUG_PRINTK(
Expand Down

0 comments on commit f246a7b

Please sign in to comment.