mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
tipc: Un-inline port routine for processing incoming messages
Converts a non-trivial routine from inline to non-inline form to avoid bloating the TIPC code base with 6 copies of its body. This change is essentially cosmetic, and doesn't change existing TIPC behavior. Signed-off-by: Allan Stephens <allan.stephens@windriver.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
This commit is contained in:
parent
b58343f9ea
commit
9b641251ae
2 changed files with 44 additions and 41 deletions
|
@ -1133,6 +1133,49 @@ int tipc_shutdown(u32 ref)
|
||||||
return tipc_disconnect(ref);
|
return tipc_disconnect(ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tipc_port_recv_msg - receive message from lower layer and deliver to port user
|
||||||
|
*/
|
||||||
|
|
||||||
|
int tipc_port_recv_msg(struct sk_buff *buf)
|
||||||
|
{
|
||||||
|
struct tipc_port *p_ptr;
|
||||||
|
struct tipc_msg *msg = buf_msg(buf);
|
||||||
|
u32 destport = msg_destport(msg);
|
||||||
|
u32 dsz = msg_data_sz(msg);
|
||||||
|
u32 err;
|
||||||
|
|
||||||
|
/* forward unresolved named message */
|
||||||
|
if (unlikely(!destport)) {
|
||||||
|
tipc_net_route_msg(buf);
|
||||||
|
return dsz;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* validate destination & pass to port, otherwise reject message */
|
||||||
|
p_ptr = tipc_port_lock(destport);
|
||||||
|
if (likely(p_ptr)) {
|
||||||
|
if (likely(p_ptr->connected)) {
|
||||||
|
if ((unlikely(msg_origport(msg) !=
|
||||||
|
tipc_peer_port(p_ptr))) ||
|
||||||
|
(unlikely(msg_orignode(msg) !=
|
||||||
|
tipc_peer_node(p_ptr))) ||
|
||||||
|
(unlikely(!msg_connected(msg)))) {
|
||||||
|
err = TIPC_ERR_NO_PORT;
|
||||||
|
tipc_port_unlock(p_ptr);
|
||||||
|
goto reject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = p_ptr->dispatcher(p_ptr, buf);
|
||||||
|
tipc_port_unlock(p_ptr);
|
||||||
|
if (likely(!err))
|
||||||
|
return dsz;
|
||||||
|
} else {
|
||||||
|
err = TIPC_ERR_NO_PORT;
|
||||||
|
}
|
||||||
|
reject:
|
||||||
|
return tipc_reject_msg(buf, err);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* tipc_port_recv_sections(): Concatenate and deliver sectioned
|
* tipc_port_recv_sections(): Concatenate and deliver sectioned
|
||||||
* message for this node.
|
* message for this node.
|
||||||
|
|
|
@ -205,6 +205,7 @@ int tipc_disconnect_port(struct tipc_port *tp_ptr);
|
||||||
/*
|
/*
|
||||||
* TIPC messaging routines
|
* TIPC messaging routines
|
||||||
*/
|
*/
|
||||||
|
int tipc_port_recv_msg(struct sk_buff *buf);
|
||||||
int tipc_send(u32 portref, unsigned int num_sect, struct iovec const *msg_sect,
|
int tipc_send(u32 portref, unsigned int num_sect, struct iovec const *msg_sect,
|
||||||
unsigned int total_len);
|
unsigned int total_len);
|
||||||
|
|
||||||
|
@ -271,45 +272,4 @@ static inline int tipc_port_congested(struct tipc_port *p_ptr)
|
||||||
return (p_ptr->sent - p_ptr->acked) >= (TIPC_FLOW_CONTROL_WIN * 2);
|
return (p_ptr->sent - p_ptr->acked) >= (TIPC_FLOW_CONTROL_WIN * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* tipc_port_recv_msg - receive message from lower layer and deliver to port user
|
|
||||||
*/
|
|
||||||
|
|
||||||
static inline int tipc_port_recv_msg(struct sk_buff *buf)
|
|
||||||
{
|
|
||||||
struct tipc_port *p_ptr;
|
|
||||||
struct tipc_msg *msg = buf_msg(buf);
|
|
||||||
u32 destport = msg_destport(msg);
|
|
||||||
u32 dsz = msg_data_sz(msg);
|
|
||||||
u32 err;
|
|
||||||
|
|
||||||
/* forward unresolved named message */
|
|
||||||
if (unlikely(!destport)) {
|
|
||||||
tipc_net_route_msg(buf);
|
|
||||||
return dsz;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* validate destination & pass to port, otherwise reject message */
|
|
||||||
p_ptr = tipc_port_lock(destport);
|
|
||||||
if (likely(p_ptr)) {
|
|
||||||
if (likely(p_ptr->connected)) {
|
|
||||||
if ((unlikely(msg_origport(msg) != tipc_peer_port(p_ptr))) ||
|
|
||||||
(unlikely(msg_orignode(msg) != tipc_peer_node(p_ptr))) ||
|
|
||||||
(unlikely(!msg_connected(msg)))) {
|
|
||||||
err = TIPC_ERR_NO_PORT;
|
|
||||||
tipc_port_unlock(p_ptr);
|
|
||||||
goto reject;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = p_ptr->dispatcher(p_ptr, buf);
|
|
||||||
tipc_port_unlock(p_ptr);
|
|
||||||
if (likely(!err))
|
|
||||||
return dsz;
|
|
||||||
} else {
|
|
||||||
err = TIPC_ERR_NO_PORT;
|
|
||||||
}
|
|
||||||
reject:
|
|
||||||
return tipc_reject_msg(buf, err);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue