Message ID | 1412975447-29958-1-git-send-email-alex.aring@gmail.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Alexander Aring <alex.aring@gmail.com> Date: Fri, 10 Oct 2014 23:10:47 +0200 > 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> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index abde271..d150734 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -1116,7 +1116,12 @@ static inline struct sk_buff *skb_unshare(struct sk_buff *skb, might_sleep_if(pri & __GFP_WAIT); if (skb_cloned(skb)) { 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; } return skb;
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> --- include/linux/skbuff.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)