net: core: Specify skb_pad()/skb_put_padto() SKB freeing
Rename skb_pad() into __skb_pad() and make it take a third argument: free_on_error which controls whether kfree_skb() should be called or not, skb_pad() directly makes use of it and passes true to preserve its existing behavior. Do exactly the same thing with __skb_put_padto() and skb_put_padto(). Suggested-by: David Miller <davem@davemloft.net> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Reviewed-by: Woojung Huh <Woojung.Huh@microchip.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
013dae5dbc
commit
cd0a137acb
@@ -1363,18 +1363,20 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
|
||||
EXPORT_SYMBOL(skb_copy_expand);
|
||||
|
||||
/**
|
||||
* skb_pad - zero pad the tail of an skb
|
||||
* __skb_pad - zero pad the tail of an skb
|
||||
* @skb: buffer to pad
|
||||
* @pad: space to pad
|
||||
* @free_on_error: free buffer on error
|
||||
*
|
||||
* Ensure that a buffer is followed by a padding area that is zero
|
||||
* filled. Used by network drivers which may DMA or transfer data
|
||||
* beyond the buffer end onto the wire.
|
||||
*
|
||||
* May return error in out of memory cases. The skb is freed on error.
|
||||
* May return error in out of memory cases. The skb is freed on error
|
||||
* if @free_on_error is true.
|
||||
*/
|
||||
|
||||
int skb_pad(struct sk_buff *skb, int pad)
|
||||
int __skb_pad(struct sk_buff *skb, int pad, bool free_on_error)
|
||||
{
|
||||
int err;
|
||||
int ntail;
|
||||
@@ -1403,10 +1405,11 @@ int skb_pad(struct sk_buff *skb, int pad)
|
||||
return 0;
|
||||
|
||||
free_skb:
|
||||
kfree_skb(skb);
|
||||
if (free_on_error)
|
||||
kfree_skb(skb);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(skb_pad);
|
||||
EXPORT_SYMBOL(__skb_pad);
|
||||
|
||||
/**
|
||||
* pskb_put - add data to the tail of a potentially fragmented buffer
|
||||
|
Reference in New Issue
Block a user