Skip to content

Commit

Permalink
tipc: Introduce routine to enqueue a chain of messages on link tx queue
Browse files Browse the repository at this point in the history
Create a helper routine to enqueue a chain of sk_buffs to a link's
transmit queue.  It improves readability and the new function is
anticipated to be used more than just once in the future as well.

Signed-off-by: Allan Stephens <[email protected]>
Signed-off-by: Paul Gortmaker <[email protected]>
  • Loading branch information
ajstephens authored and Paul Gortmaker committed May 10, 2011
1 parent 2689690 commit dc63d91
Showing 1 changed file with 22 additions and 16 deletions.
38 changes: 22 additions & 16 deletions net/tipc/link.c
Original file line number Diff line number Diff line change
Expand Up @@ -843,6 +843,25 @@ static void link_add_to_outqueue(struct link *l_ptr,
l_ptr->stats.max_queue_sz = l_ptr->out_queue_size;
}

static void link_add_chain_to_outqueue(struct link *l_ptr,
struct sk_buff *buf_chain,
u32 long_msgno)
{
struct sk_buff *buf;
struct tipc_msg *msg;

if (!l_ptr->next_out)
l_ptr->next_out = buf_chain;
while (buf_chain) {
buf = buf_chain;
buf_chain = buf_chain->next;

msg = buf_msg(buf);
msg_set_long_msgno(msg, long_msgno);
link_add_to_outqueue(l_ptr, buf, msg);
}
}

/*
* tipc_link_send_buf() is the 'full path' for messages, called from
* inside TIPC when the 'fast path' in tipc_send_buf
Expand Down Expand Up @@ -1276,25 +1295,12 @@ static int link_send_sections_long(struct tipc_port *sender,
total_len, TIPC_ERR_NO_NODE);
}

/* Append whole chain to send queue: */
/* Append chain of fragments to send queue & send them */

buf = buf_chain;
l_ptr->long_msg_seq_no++;
if (!l_ptr->next_out)
l_ptr->next_out = buf_chain;
link_add_chain_to_outqueue(l_ptr, buf_chain, l_ptr->long_msg_seq_no);
l_ptr->stats.sent_fragments += fragm_no;
l_ptr->stats.sent_fragmented++;
while (buf) {
struct sk_buff *next = buf->next;
struct tipc_msg *msg = buf_msg(buf);

l_ptr->stats.sent_fragments++;
msg_set_long_msgno(msg, l_ptr->long_msg_seq_no);
link_add_to_outqueue(l_ptr, buf, msg);
buf = next;
}

/* Send it, if possible: */

tipc_link_push_queue(l_ptr);
tipc_node_unlock(node);
return dsz;
Expand Down

0 comments on commit dc63d91

Please sign in to comment.