Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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)
 * @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 tipc_media_addr media_addr;
	struct tipc_msg *msg = buf_msg(buf);
+1 −1
Original line number Diff line number Diff line
@@ -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_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);
#if 0
+5 −22
Original line number Diff line number Diff line
@@ -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;
}

/*
 * 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
 */
@@ -1857,7 +1842,7 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr)
{
	read_lock_bh(&tipc_net_lock);
	while (head) {
		struct bearer *b_ptr;
		struct bearer *b_ptr = (struct bearer *)tb_ptr;
		struct node *n_ptr;
		struct link *l_ptr;
		struct sk_buff *crs;
@@ -1868,9 +1853,6 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr)
		u32 released = 0;
		int type;

		b_ptr = (struct bearer *)tb_ptr;
		TIPC_SKB_CB(buf)->handle = b_ptr;

		head = head->next;

		/* Ensure message is well-formed */
@@ -1889,7 +1871,10 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr)
		msg = buf_msg(buf);

		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;
		}

@@ -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)) {
							msg = buf_msg(buf);
							seq_no = msg_seqno(msg);
							TIPC_SKB_CB(buf)->handle
								= b_ptr;
							if (type == ORIGINAL_MSG)
								goto deliver;
							goto protocol_check;