aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp/outqueue.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sctp/outqueue.c')
-rw-r--r--net/sctp/outqueue.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
index 5732661c87d3..2f2377369e2b 100644
--- a/net/sctp/outqueue.c
+++ b/net/sctp/outqueue.c
@@ -931,6 +931,14 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)
931 goto sctp_flush_out; 931 goto sctp_flush_out;
932 } 932 }
933 933
934 /* Apply Max.Burst limitation to the current transport in
935 * case it will be used for new data. We are going to
936 * rest it before we return, but we want to apply the limit
937 * to the currently queued data.
938 */
939 if (transport)
940 sctp_transport_burst_limited(transport);
941
934 /* Finally, transmit new packets. */ 942 /* Finally, transmit new packets. */
935 while ((chunk = sctp_outq_dequeue_data(q)) != NULL) { 943 while ((chunk = sctp_outq_dequeue_data(q)) != NULL) {
936 /* RFC 2960 6.5 Every DATA chunk MUST carry a valid 944 /* RFC 2960 6.5 Every DATA chunk MUST carry a valid
@@ -976,6 +984,10 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)
976 packet = &transport->packet; 984 packet = &transport->packet;
977 sctp_packet_config(packet, vtag, 985 sctp_packet_config(packet, vtag,
978 asoc->peer.ecn_capable); 986 asoc->peer.ecn_capable);
987 /* We've switched transports, so apply the
988 * Burst limit to the new transport.
989 */
990 sctp_transport_burst_limited(transport);
979 } 991 }
980 992
981 SCTP_DEBUG_PRINTK("sctp_outq_flush(%p, %p[%s]), ", 993 SCTP_DEBUG_PRINTK("sctp_outq_flush(%p, %p[%s]), ",
@@ -1070,6 +1082,9 @@ sctp_flush_out:
1070 packet = &t->packet; 1082 packet = &t->packet;
1071 if (!sctp_packet_empty(packet)) 1083 if (!sctp_packet_empty(packet))
1072 error = sctp_packet_transmit(packet); 1084 error = sctp_packet_transmit(packet);
1085
1086 /* Clear the burst limited state, if any */
1087 sctp_transport_burst_reset(t);
1073 } 1088 }
1074 1089
1075 return error; 1090 return error;