aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/bearer.c
diff options
context:
space:
mode:
authorJon Paul Maloy <jon.maloy@ericsson.com>2015-10-22 08:51:44 -0400
committerDavid S. Miller <davem@davemloft.net>2015-10-24 06:56:44 -0700
commit60852d679575b0d7ce62497938116f92654ae908 (patch)
tree767fe010b1c9e2c96d6c23dd91d652386a1a3ec7 /net/tipc/bearer.c
parenttipc: introduce jumbo frame support for broadcast (diff)
downloadlinux-dev-60852d679575b0d7ce62497938116f92654ae908.tar.xz
linux-dev-60852d679575b0d7ce62497938116f92654ae908.zip
tipc: let neighbor discoverer tranmsit consumable buffers
The neighbor discovery function currently uses the function tipc_bearer_send() for transmitting packets, assuming that the sent buffers are not consumed by the called function. We want to change this, in order to avoid unnecessary buffer cloning elswhere in the code. This commit introduces a new function tipc_bearer_skb() which consumes the sent buffers, and let the discoverer functions use this new call instead. The discoverer does now itself perform the cloning when that is necessary. Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Reviewed-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/bearer.c')
-rw-r--r--net/tipc/bearer.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index b39f631fd6d7..11333916279f 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -477,6 +477,24 @@ int tipc_bearer_mtu(struct net *net, u32 bearer_id)
return mtu;
}
+/* tipc_bearer_xmit_skb - sends buffer to destination over bearer
+ */
+void tipc_bearer_xmit_skb(struct net *net, u32 bearer_id,
+ struct sk_buff *skb,
+ struct tipc_media_addr *dest)
+{
+ struct tipc_net *tn = tipc_net(net);
+ struct tipc_bearer *b;
+
+ rcu_read_lock();
+ b = rcu_dereference_rtnl(tn->bearer_list[bearer_id]);
+ if (likely(b))
+ b->media->send_msg(net, skb, b, dest);
+ rcu_read_unlock();
+ /* Until we remove cloning in tipc_l2_send_msg(): */
+ kfree_skb(skb);
+}
+
/* tipc_bearer_xmit() -send buffer to destination over bearer
*/
void tipc_bearer_xmit(struct net *net, u32 bearer_id,