aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp/chunk.c
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /net/sctp/chunk.c
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff)
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'net/sctp/chunk.c')
-rw-r--r--net/sctp/chunk.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c
index acf7c4d128f7..3eab6db59a37 100644
--- a/net/sctp/chunk.c
+++ b/net/sctp/chunk.c
@@ -42,6 +42,7 @@
42#include <linux/net.h> 42#include <linux/net.h>
43#include <linux/inet.h> 43#include <linux/inet.h>
44#include <linux/skbuff.h> 44#include <linux/skbuff.h>
45#include <linux/slab.h>
45#include <net/sock.h> 46#include <net/sock.h>
46#include <net/sctp/sctp.h> 47#include <net/sctp/sctp.h>
47#include <net/sctp/sm.h> 48#include <net/sctp/sm.h>
@@ -263,9 +264,18 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
263 if (0 == i) 264 if (0 == i)
264 frag |= SCTP_DATA_FIRST_FRAG; 265 frag |= SCTP_DATA_FIRST_FRAG;
265 266
266 if ((i == (whole - 1)) && !over) 267 if ((i == (whole - 1)) && !over) {
267 frag |= SCTP_DATA_LAST_FRAG; 268 frag |= SCTP_DATA_LAST_FRAG;
268 269
270 /* The application requests to set the I-bit of the
271 * last DATA chunk of a user message when providing
272 * the user message to the SCTP implementation.
273 */
274 if ((sinfo->sinfo_flags & SCTP_EOF) ||
275 (sinfo->sinfo_flags & SCTP_SACK_IMMEDIATELY))
276 frag |= SCTP_DATA_SACK_IMM;
277 }
278
269 chunk = sctp_make_datafrag_empty(asoc, sinfo, len, frag, 0); 279 chunk = sctp_make_datafrag_empty(asoc, sinfo, len, frag, 0);
270 280
271 if (!chunk) 281 if (!chunk)
@@ -297,6 +307,10 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
297 else 307 else
298 frag = SCTP_DATA_LAST_FRAG; 308 frag = SCTP_DATA_LAST_FRAG;
299 309
310 if ((sinfo->sinfo_flags & SCTP_EOF) ||
311 (sinfo->sinfo_flags & SCTP_SACK_IMMEDIATELY))
312 frag |= SCTP_DATA_SACK_IMM;
313
300 chunk = sctp_make_datafrag_empty(asoc, sinfo, over, frag, 0); 314 chunk = sctp_make_datafrag_empty(asoc, sinfo, over, frag, 0);
301 315
302 if (!chunk) 316 if (!chunk)