From 68c0a80bb8bc4e00fc1c5f1b24ac6ee37ffcb997 Mon Sep 17 00:00:00 2001 From: Wei Yongjun Date: Fri, 30 Apr 2010 22:38:53 -0400 Subject: [PATCH] --- yaml --- r: 194634 b: refs/heads/master c: bc4f841a05364b2572bcc266e9fd7e9cf5f06d5b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/sctp/outqueue.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index ba45656b4459..8e4227f8038e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6429d3dc4bd6251b01c11b851e23a4d60f079e06 +refs/heads/master: bc4f841a05364b2572bcc266e9fd7e9cf5f06d5b diff --git a/trunk/net/sctp/outqueue.c b/trunk/net/sctp/outqueue.c index 16d451a62b3f..e333d5833616 100644 --- a/trunk/net/sctp/outqueue.c +++ b/trunk/net/sctp/outqueue.c @@ -598,11 +598,23 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, if (fast_rtx && !chunk->fast_retransmit) continue; +redo: /* Attempt to append this chunk to the packet. */ status = sctp_packet_append_chunk(pkt, chunk); switch (status) { case SCTP_XMIT_PMTU_FULL: + if (!pkt->has_data && !pkt->has_cookie_echo) { + /* If this packet did not contain DATA then + * retransmission did not happen, so do it + * again. We'll ignore the error here since + * control chunks are already freed so there + * is nothing we can do. + */ + sctp_packet_transmit(pkt); + goto redo; + } + /* Send this packet. */ error = sctp_packet_transmit(pkt);