The following commit has been merged in the batman-adv/next branch: commit 47061bc440b90a16d856fb0dba1cffc36427efa4 Author: Eric Dumazet edumazet@google.com Date: Fri Aug 3 20:54:15 2012 +0000
net: skb_share_check() should use consume_skb()
In order to avoid false drop_monitor indications, we should call consume_skb() if skb_clone() was successful.
Signed-off-by: Eric Dumazet edumazet@google.com Signed-off-by: David S. Miller davem@davemloft.net
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 7632c87..b33a3a1 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -846,13 +846,16 @@ static inline int skb_shared(const struct sk_buff *skb) * * NULL is returned on a memory allocation failure. */ -static inline struct sk_buff *skb_share_check(struct sk_buff *skb, - gfp_t pri) +static inline struct sk_buff *skb_share_check(struct sk_buff *skb, gfp_t pri) { might_sleep_if(pri & __GFP_WAIT); if (skb_shared(skb)) { struct sk_buff *nskb = skb_clone(skb, pri); - kfree_skb(skb); + + if (likely(nskb)) + consume_skb(skb); + else + kfree_skb(skb); skb = nskb; } return skb;