sctp: Send user messages to the lower layer as one
Currenlty, sctp breaks up user messages into fragments and sends each fragment to the lower layer by itself. This means that for each fragment we go all the way down the stack and back up. This also discourages bundling of multiple fragments when they can fit into a sigle packet (ex: due to user setting a low fragmentation threashold). We introduce a new command SCTP_CMD_SND_MSG and hand the whole message down state machine. The state machine and the side-effect parser will cork the queue, add all chunks from the message to the queue, and then un-cork the queue thus causing the chunks to get transmitted. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
This commit is contained in:
parent
5d7ff261ef
commit
9c5c62be2f
6 changed files with 61 additions and 15 deletions
|
@ -73,6 +73,19 @@ SCTP_STATIC struct sctp_datamsg *sctp_datamsg_new(gfp_t gfp)
|
|||
return msg;
|
||||
}
|
||||
|
||||
void sctp_datamsg_free(struct sctp_datamsg *msg)
|
||||
{
|
||||
struct sctp_chunk *chunk;
|
||||
|
||||
/* This doesn't have to be a _safe vairant because
|
||||
* sctp_chunk_free() only drops the refs.
|
||||
*/
|
||||
list_for_each_entry(chunk, &msg->chunks, frag_list)
|
||||
sctp_chunk_free(chunk);
|
||||
|
||||
sctp_datamsg_put(msg);
|
||||
}
|
||||
|
||||
/* Final destructruction of datamsg memory. */
|
||||
static void sctp_datamsg_destroy(struct sctp_datamsg *msg)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue