skbuff: fix ftrace handling in skb_unshare
If the skb is not dropped afterwards we should run consume_skb instead kfree_skb. Inside of function skb_unshare we do always a kfree_skb, doesn't depend if skb_copy failed or was successful. This patch switch this behaviour like skb_share_check, if allocation of sk_buff failed we use kfree_skb otherwise consume_skb. Signed-off-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2c2b2f0cb9
commit
31eff81e94
@ -1203,7 +1203,12 @@ static inline struct sk_buff *skb_unshare(struct sk_buff *skb,
|
|||||||
might_sleep_if(pri & __GFP_WAIT);
|
might_sleep_if(pri & __GFP_WAIT);
|
||||||
if (skb_cloned(skb)) {
|
if (skb_cloned(skb)) {
|
||||||
struct sk_buff *nskb = skb_copy(skb, pri);
|
struct sk_buff *nskb = skb_copy(skb, pri);
|
||||||
kfree_skb(skb); /* Free our shared copy */
|
|
||||||
|
/* Free our shared copy */
|
||||||
|
if (likely(nskb))
|
||||||
|
consume_skb(skb);
|
||||||
|
else
|
||||||
|
kfree_skb(skb);
|
||||||
skb = nskb;
|
skb = nskb;
|
||||||
}
|
}
|
||||||
return skb;
|
return skb;
|
||||||
|
Loading…
Reference in New Issue
Block a user