Commit 1265a021 authored by Allan Stephens's avatar Allan Stephens Committed by David S. Miller

tipc: Minor optimizations to received message processing

This patch enhances TIPC's handler for incoming messages in two
ways:
- the trivial, single-use routine for processing non-sequenced
  messages has been merged into the main handler
- the interface that received a message is now identified without
  having to access and/or modify the associated sk_buff
Signed-off-by: default avatarAllan Stephens <allan.stephens@windriver.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a686e685
...@@ -156,11 +156,11 @@ static void disc_dupl_alert(struct bearer *b_ptr, u32 node_addr, ...@@ -156,11 +156,11 @@ static void disc_dupl_alert(struct bearer *b_ptr, u32 node_addr,
/** /**
* tipc_disc_recv_msg - handle incoming link setup message (request or response) * tipc_disc_recv_msg - handle incoming link setup message (request or response)
* @buf: buffer containing message * @buf: buffer containing message
* @b_ptr: bearer that message arrived on
*/ */
void tipc_disc_recv_msg(struct sk_buff *buf) void tipc_disc_recv_msg(struct sk_buff *buf, struct bearer *b_ptr)
{ {
struct bearer *b_ptr = (struct bearer *)TIPC_SKB_CB(buf)->handle;
struct link *link; struct link *link;
struct tipc_media_addr media_addr; struct tipc_media_addr media_addr;
struct tipc_msg *msg = buf_msg(buf); struct tipc_msg *msg = buf_msg(buf);
......
...@@ -48,7 +48,7 @@ struct link_req *tipc_disc_init_link_req(struct bearer *b_ptr, ...@@ -48,7 +48,7 @@ struct link_req *tipc_disc_init_link_req(struct bearer *b_ptr,
void tipc_disc_update_link_req(struct link_req *req); void tipc_disc_update_link_req(struct link_req *req);
void tipc_disc_stop_link_req(struct link_req *req); void tipc_disc_stop_link_req(struct link_req *req);
void tipc_disc_recv_msg(struct sk_buff *buf); void tipc_disc_recv_msg(struct sk_buff *buf, struct bearer *b_ptr);
void tipc_disc_link_event(u32 addr, char *name, int up); void tipc_disc_link_event(u32 addr, char *name, int up);
#if 0 #if 0
......
...@@ -1766,21 +1766,6 @@ void tipc_link_retransmit(struct link *l_ptr, struct sk_buff *buf, ...@@ -1766,21 +1766,6 @@ void tipc_link_retransmit(struct link *l_ptr, struct sk_buff *buf,
l_ptr->retransm_queue_head = l_ptr->retransm_queue_size = 0; l_ptr->retransm_queue_head = l_ptr->retransm_queue_size = 0;
} }
/*
* link_recv_non_seq: Receive packets which are outside
* the link sequence flow
*/
static void link_recv_non_seq(struct sk_buff *buf)
{
struct tipc_msg *msg = buf_msg(buf);
if (msg_user(msg) == LINK_CONFIG)
tipc_disc_recv_msg(buf);
else
tipc_bclink_recv_pkt(buf);
}
/** /**
* link_insert_deferred_queue - insert deferred messages back into receive chain * link_insert_deferred_queue - insert deferred messages back into receive chain
*/ */
...@@ -1857,7 +1842,7 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr) ...@@ -1857,7 +1842,7 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr)
{ {
read_lock_bh(&tipc_net_lock); read_lock_bh(&tipc_net_lock);
while (head) { while (head) {
struct bearer *b_ptr; struct bearer *b_ptr = (struct bearer *)tb_ptr;
struct node *n_ptr; struct node *n_ptr;
struct link *l_ptr; struct link *l_ptr;
struct sk_buff *crs; struct sk_buff *crs;
...@@ -1868,9 +1853,6 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr) ...@@ -1868,9 +1853,6 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr)
u32 released = 0; u32 released = 0;
int type; int type;
b_ptr = (struct bearer *)tb_ptr;
TIPC_SKB_CB(buf)->handle = b_ptr;
head = head->next; head = head->next;
/* Ensure message is well-formed */ /* Ensure message is well-formed */
...@@ -1889,7 +1871,10 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr) ...@@ -1889,7 +1871,10 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr)
msg = buf_msg(buf); msg = buf_msg(buf);
if (unlikely(msg_non_seq(msg))) { if (unlikely(msg_non_seq(msg))) {
link_recv_non_seq(buf); if (msg_user(msg) == LINK_CONFIG)
tipc_disc_recv_msg(buf, b_ptr);
else
tipc_bclink_recv_pkt(buf);
continue; continue;
} }
...@@ -1996,8 +1981,6 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr) ...@@ -1996,8 +1981,6 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr)
if (link_recv_changeover_msg(&l_ptr, &buf)) { if (link_recv_changeover_msg(&l_ptr, &buf)) {
msg = buf_msg(buf); msg = buf_msg(buf);
seq_no = msg_seqno(msg); seq_no = msg_seqno(msg);
TIPC_SKB_CB(buf)->handle
= b_ptr;
if (type == ORIGINAL_MSG) if (type == ORIGINAL_MSG)
goto deliver; goto deliver;
goto protocol_check; goto protocol_check;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment