Commit 96a4ef02 authored by Jon Grimm's avatar Jon Grimm

[SCTP] Fix regression in mark_missing. (Ardelle.Fan)

Followup patch by Ardelle. 
parent 506ab679
...@@ -63,6 +63,7 @@ static void sctp_check_transmitted(struct sctp_outq *q, ...@@ -63,6 +63,7 @@ static void sctp_check_transmitted(struct sctp_outq *q,
__u32 highest_new_tsn); __u32 highest_new_tsn);
static void sctp_mark_missing(struct sctp_outq *q, static void sctp_mark_missing(struct sctp_outq *q,
struct list_head *transmitted_queue,
struct sctp_transport *transport, struct sctp_transport *transport,
__u32 highest_new_tsn, __u32 highest_new_tsn,
int count_of_newacks); int count_of_newacks);
...@@ -1304,6 +1305,7 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_sackhdr *sack) ...@@ -1304,6 +1305,7 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_sackhdr *sack)
* and free those chunks that we can. * and free those chunks that we can.
*/ */
sctp_check_transmitted(q, &q->retransmit, NULL, sack, highest_new_tsn); sctp_check_transmitted(q, &q->retransmit, NULL, sack, highest_new_tsn);
sctp_mark_missing(q, &q->retransmit, NULL, highest_new_tsn, 0);
/* Run through the transmitted queue. /* Run through the transmitted queue.
* Credit bytes received and free those chunks which we can. * Credit bytes received and free those chunks which we can.
...@@ -1327,8 +1329,8 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_sackhdr *sack) ...@@ -1327,8 +1329,8 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_sackhdr *sack)
list_for_each(pos, transport_list) { list_for_each(pos, transport_list) {
transport = list_entry(pos, struct sctp_transport, transport = list_entry(pos, struct sctp_transport,
transports); transports);
sctp_mark_missing(q, transport, highest_new_tsn, sctp_mark_missing(q, &transport->transmitted, transport,
count_of_newacks); highest_new_tsn, count_of_newacks);
} }
/* Move the Cumulative TSN Ack Point if appropriate. */ /* Move the Cumulative TSN Ack Point if appropriate. */
...@@ -1731,6 +1733,7 @@ static void sctp_check_transmitted(struct sctp_outq *q, ...@@ -1731,6 +1733,7 @@ static void sctp_check_transmitted(struct sctp_outq *q,
/* Mark chunks as missing and consequently may get retransmitted. */ /* Mark chunks as missing and consequently may get retransmitted. */
static void sctp_mark_missing(struct sctp_outq *q, static void sctp_mark_missing(struct sctp_outq *q,
struct list_head *transmitted_queue,
struct sctp_transport *transport, struct sctp_transport *transport,
__u32 highest_new_tsn_in_sack, __u32 highest_new_tsn_in_sack,
int count_of_newacks) int count_of_newacks)
...@@ -1741,7 +1744,7 @@ static void sctp_mark_missing(struct sctp_outq *q, ...@@ -1741,7 +1744,7 @@ static void sctp_mark_missing(struct sctp_outq *q,
char do_fast_retransmit = 0; char do_fast_retransmit = 0;
struct sctp_transport *primary = q->asoc->peer.primary_path; struct sctp_transport *primary = q->asoc->peer.primary_path;
list_for_each(pos, &transport->transmitted) { list_for_each(pos, transmitted_queue) {
chunk = list_entry(pos, struct sctp_chunk, transmitted_list); chunk = list_entry(pos, struct sctp_chunk, transmitted_list);
tsn = ntohl(chunk->subh.data_hdr->tsn); tsn = ntohl(chunk->subh.data_hdr->tsn);
...@@ -1760,7 +1763,7 @@ static void sctp_mark_missing(struct sctp_outq *q, ...@@ -1760,7 +1763,7 @@ static void sctp_mark_missing(struct sctp_outq *q,
/* SFR-CACC may require us to skip marking /* SFR-CACC may require us to skip marking
* this chunk as missing. * this chunk as missing.
*/ */
if (!sctp_cacc_skip(primary, transport, if (!transport || !sctp_cacc_skip(primary, transport,
count_of_newacks, tsn)) { count_of_newacks, tsn)) {
chunk->tsn_missing_report++; chunk->tsn_missing_report++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment