mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-30 10:49:28 +00:00
can: omit unneeded skb_clone() calls
The AF_CAN core delivered always cloned sk_buffs to the AF_CAN protocols, although this was _only_ needed by the can-raw protocol. With this (additionally documented) change, the AF_CAN core calls the callback functions of the registered AF_CAN protocols with the original (uncloned) sk_buff pointer and let's the can-raw protocol do the skb_clone() itself which omits all unneeded skb_clone() calls for other AF_CAN protocols. Signed-off-by: Oliver Hartkopp <oliver@hartkopp.net> Signed-off-by: Urs Thuermann <urs.thuermann@volkswagen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
98658bc9dc
commit
1fa17d4ba4
4 changed files with 22 additions and 22 deletions
|
@ -99,13 +99,14 @@ static void raw_rcv(struct sk_buff *skb, void *data)
|
|||
struct raw_sock *ro = raw_sk(sk);
|
||||
struct sockaddr_can *addr;
|
||||
|
||||
if (!ro->recv_own_msgs) {
|
||||
/* check the received tx sock reference */
|
||||
if (skb->sk == sk) {
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* check the received tx sock reference */
|
||||
if (!ro->recv_own_msgs && skb->sk == sk)
|
||||
return;
|
||||
|
||||
/* clone the given skb to be able to enqueue it into the rcv queue */
|
||||
skb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (!skb)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Put the datagram to the queue so that raw_recvmsg() can
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue