tipc: Optimize routing of returned payload messages
Allan Stephens [Tue, 24 May 2011 17:20:09 +0000 (13:20 -0400)]
Reduces the work involved in transmitting a returned payload message
by doing only the work necessary to route such a message directly to
the specified destination port, rather than invoking the code used
to route an arbitrary message to an arbitrary destination.

Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>

net/tipc/port.c

index 756e64c..70ecdfd 100644 (file)
@@ -360,6 +360,7 @@ int tipc_reject_msg(struct sk_buff *buf, u32 err)
        int hdr_sz;
        u32 imp = msg_importance(msg);
        u32 data_sz = msg_data_sz(msg);
+       u32 src_node;
 
        if (data_sz > MAX_REJECT_SIZE)
                data_sz = MAX_REJECT_SIZE;
@@ -416,7 +417,11 @@ int tipc_reject_msg(struct sk_buff *buf, u32 err)
 
        /* send returned message & dispose of rejected message */
 
-       tipc_net_route_msg(rbuf);
+       src_node = msg_prevnode(msg);
+       if (src_node == tipc_own_addr)
+               tipc_port_recv_msg(rbuf);
+       else
+               tipc_link_send(rbuf, src_node, msg_link_selector(rmsg));
 exit:
        buf_discard(buf);
        return data_sz;