diff options
| -rw-r--r-- | net/sctp/ulpqueue.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/net/sctp/ulpqueue.c b/net/sctp/ulpqueue.c index bfb197e37da3..b29e3e4b72c9 100644 --- a/net/sctp/ulpqueue.c +++ b/net/sctp/ulpqueue.c | |||
| @@ -190,7 +190,14 @@ int sctp_ulpq_tail_event(struct sctp_ulpq *ulpq, struct sctp_ulpevent *event) | |||
| 190 | if (!sctp_sk(sk)->pd_mode) { | 190 | if (!sctp_sk(sk)->pd_mode) { |
| 191 | queue = &sk->sk_receive_queue; | 191 | queue = &sk->sk_receive_queue; |
| 192 | } else if (ulpq->pd_mode) { | 192 | } else if (ulpq->pd_mode) { |
| 193 | if (event->msg_flags & MSG_NOTIFICATION) | 193 | /* If the association is in partial delivery, we |
| 194 | * need to finish delivering the partially processed | ||
| 195 | * packet before passing any other data. This is | ||
| 196 | * because we don't truly support stream interleaving. | ||
| 197 | */ | ||
| 198 | if ((event->msg_flags & MSG_NOTIFICATION) || | ||
| 199 | (SCTP_DATA_NOT_FRAG == | ||
| 200 | (event->msg_flags & SCTP_DATA_FRAG_MASK))) | ||
| 194 | queue = &sctp_sk(sk)->pd_lobby; | 201 | queue = &sctp_sk(sk)->pd_lobby; |
| 195 | else { | 202 | else { |
| 196 | clear_pd = event->msg_flags & MSG_EOR; | 203 | clear_pd = event->msg_flags & MSG_EOR; |
