summaryrefslogtreecommitdiffstats
path: root/net/sctp/outqueue.c
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2014-01-10 11:52:05 +0000
committerMark Brown <broonie@linaro.org>2014-01-10 11:52:05 +0000
commitfce6bd84d663b92997e0fa9c971ed2b2cdf08fb4 (patch)
treec5b460cfc60b16a7c6718ae2613bb1d9cb98e5b8 /net/sctp/outqueue.c
parent56d37d85438df38e150282baafe52dcd588854c7 (diff)
parent374b105797c3d4f29c685f3be535c35f5689b30e (diff)
downloadlinux-fce6bd84d663b92997e0fa9c971ed2b2cdf08fb4.tar.bz2
Merge tag 'v3.13-rc3' into asoc-arizona
Linux 3.13-rc3
Diffstat (limited to 'net/sctp/outqueue.c')
-rw-r--r--net/sctp/outqueue.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
index 94df75877869..f51ba985a36e 100644
--- a/net/sctp/outqueue.c
+++ b/net/sctp/outqueue.c
@@ -446,6 +446,8 @@ void sctp_retransmit_mark(struct sctp_outq *q,
transport->rto_pending = 0;
}
+ chunk->resent = 1;
+
/* Move the chunk to the retransmit queue. The chunks
* on the retransmit queue are always kept in order.
*/
@@ -1375,6 +1377,7 @@ static void sctp_check_transmitted(struct sctp_outq *q,
* instance).
*/
if (!tchunk->tsn_gap_acked &&
+ !tchunk->resent &&
tchunk->rtt_in_progress) {
tchunk->rtt_in_progress = 0;
rtt = jiffies - tchunk->sent_at;
@@ -1391,7 +1394,8 @@ static void sctp_check_transmitted(struct sctp_outq *q,
*/
if (!tchunk->tsn_gap_acked) {
tchunk->tsn_gap_acked = 1;
- *highest_new_tsn_in_sack = tsn;
+ if (TSN_lt(*highest_new_tsn_in_sack, tsn))
+ *highest_new_tsn_in_sack = tsn;
bytes_acked += sctp_data_size(tchunk);
if (!tchunk->transport)
migrate_bytes += sctp_data_size(tchunk);