aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2007-11-09 11:43:41 -0500
committerVlad Yasevich <vladislav.yasevich@hp.com>2007-11-09 11:43:41 -0500
commit7d54dc6876b83d6bb75b8f7e865b7b9051056d22 (patch)
tree3b9939c45103cf0f16c333f12efb24057ecc0e64 /net/sctp
parentfa7ff654e14ccacd4e758c9878ff4884f816c877 (diff)
SCTP: Always flush the queue when uncorcking.
When the code calls uncork, trigger a queue flush, even if the queue was not corked. Most callers that explicitely cork the queue will have additinal checks to see if they corked it. Callers who do not cork the queue expect packets to flow when they call uncork. The scneario that showcased this bug happend when we were not able to bundle DATA with outgoing COOKIE-ECHO. As a result the data just sat in the outqueue and did not get transmitted. The application expected a response, but nothing happened. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Diffstat (limited to 'net/sctp')
-rw-r--r--net/sctp/outqueue.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
index 99a3db5d5fae..fa76f235169b 100644
--- a/net/sctp/outqueue.c
+++ b/net/sctp/outqueue.c
@@ -662,10 +662,9 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt,
662int sctp_outq_uncork(struct sctp_outq *q) 662int sctp_outq_uncork(struct sctp_outq *q)
663{ 663{
664 int error = 0; 664 int error = 0;
665 if (q->cork) { 665 if (q->cork)
666 q->cork = 0; 666 q->cork = 0;
667 error = sctp_outq_flush(q, 0); 667 error = sctp_outq_flush(q, 0);
668 }
669 return error; 668 return error;
670} 669}
671 670