diff options
Diffstat (limited to 'net/sctp/outqueue.c')
| -rw-r--r-- | net/sctp/outqueue.c | 6 |
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, | |||
| 446 | transport->rto_pending = 0; | 446 | transport->rto_pending = 0; |
| 447 | } | 447 | } |
| 448 | 448 | ||
| 449 | chunk->resent = 1; | ||
| 450 | |||
| 449 | /* Move the chunk to the retransmit queue. The chunks | 451 | /* Move the chunk to the retransmit queue. The chunks |
| 450 | * on the retransmit queue are always kept in order. | 452 | * on the retransmit queue are always kept in order. |
| 451 | */ | 453 | */ |
| @@ -1375,6 +1377,7 @@ static void sctp_check_transmitted(struct sctp_outq *q, | |||
| 1375 | * instance). | 1377 | * instance). |
| 1376 | */ | 1378 | */ |
| 1377 | if (!tchunk->tsn_gap_acked && | 1379 | if (!tchunk->tsn_gap_acked && |
| 1380 | !tchunk->resent && | ||
| 1378 | tchunk->rtt_in_progress) { | 1381 | tchunk->rtt_in_progress) { |
| 1379 | tchunk->rtt_in_progress = 0; | 1382 | tchunk->rtt_in_progress = 0; |
| 1380 | rtt = jiffies - tchunk->sent_at; | 1383 | rtt = jiffies - tchunk->sent_at; |
| @@ -1391,7 +1394,8 @@ static void sctp_check_transmitted(struct sctp_outq *q, | |||
| 1391 | */ | 1394 | */ |
| 1392 | if (!tchunk->tsn_gap_acked) { | 1395 | if (!tchunk->tsn_gap_acked) { |
| 1393 | tchunk->tsn_gap_acked = 1; | 1396 | tchunk->tsn_gap_acked = 1; |
| 1394 | *highest_new_tsn_in_sack = tsn; | 1397 | if (TSN_lt(*highest_new_tsn_in_sack, tsn)) |
| 1398 | *highest_new_tsn_in_sack = tsn; | ||
| 1395 | bytes_acked += sctp_data_size(tchunk); | 1399 | bytes_acked += sctp_data_size(tchunk); |
| 1396 | if (!tchunk->transport) | 1400 | if (!tchunk->transport) |
| 1397 | migrate_bytes += sctp_data_size(tchunk); | 1401 | migrate_bytes += sctp_data_size(tchunk); |
