diff options
-rw-r--r-- | include/linux/skbuff.h | 22 | ||||
-rw-r--r-- | net/core/skbuff.c | 24 |
2 files changed, 46 insertions, 0 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 4307e764ef0a..b91fbfb7d54c 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -1104,6 +1104,28 @@ static inline struct sk_buff *dev_alloc_skb(unsigned int length) | |||
1104 | return __dev_alloc_skb(length, GFP_ATOMIC); | 1104 | return __dev_alloc_skb(length, GFP_ATOMIC); |
1105 | } | 1105 | } |
1106 | 1106 | ||
1107 | extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev, | ||
1108 | unsigned int length, gfp_t gfp_mask); | ||
1109 | |||
1110 | /** | ||
1111 | * netdev_alloc_skb - allocate an skbuff for rx on a specific device | ||
1112 | * @dev: network device to receive on | ||
1113 | * @length: length to allocate | ||
1114 | * | ||
1115 | * Allocate a new &sk_buff and assign it a usage count of one. The | ||
1116 | * buffer has unspecified headroom built in. Users should allocate | ||
1117 | * the headroom they think they need without accounting for the | ||
1118 | * built in space. The built in space is used for optimisations. | ||
1119 | * | ||
1120 | * %NULL is returned if there is no free memory. Although this function | ||
1121 | * allocates memory it can be called from an interrupt. | ||
1122 | */ | ||
1123 | static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev, | ||
1124 | unsigned int length) | ||
1125 | { | ||
1126 | return __netdev_alloc_skb(dev, length, GFP_ATOMIC); | ||
1127 | } | ||
1128 | |||
1107 | /** | 1129 | /** |
1108 | * skb_cow - copy header of skb when it is required | 1130 | * skb_cow - copy header of skb when it is required |
1109 | * @skb: buffer to cow | 1131 | * @skb: buffer to cow |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index d236f02c6467..71487b915d67 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -256,6 +256,29 @@ nodata: | |||
256 | goto out; | 256 | goto out; |
257 | } | 257 | } |
258 | 258 | ||
259 | /** | ||
260 | * __netdev_alloc_skb - allocate an skbuff for rx on a specific device | ||
261 | * @dev: network device to receive on | ||
262 | * @length: length to allocate | ||
263 | * @gfp_mask: get_free_pages mask, passed to alloc_skb | ||
264 | * | ||
265 | * Allocate a new &sk_buff and assign it a usage count of one. The | ||
266 | * buffer has unspecified headroom built in. Users should allocate | ||
267 | * the headroom they think they need without accounting for the | ||
268 | * built in space. The built in space is used for optimisations. | ||
269 | * | ||
270 | * %NULL is returned if there is no free memory. | ||
271 | */ | ||
272 | struct sk_buff *__netdev_alloc_skb(struct net_device *dev, | ||
273 | unsigned int length, gfp_t gfp_mask) | ||
274 | { | ||
275 | struct sk_buff *skb; | ||
276 | |||
277 | skb = alloc_skb(length + NET_SKB_PAD, gfp_mask); | ||
278 | if (likely(skb)) | ||
279 | skb_reserve(skb, NET_SKB_PAD); | ||
280 | return skb; | ||
281 | } | ||
259 | 282 | ||
260 | static void skb_drop_list(struct sk_buff **listp) | 283 | static void skb_drop_list(struct sk_buff **listp) |
261 | { | 284 | { |
@@ -2048,6 +2071,7 @@ EXPORT_SYMBOL(__kfree_skb); | |||
2048 | EXPORT_SYMBOL(kfree_skb); | 2071 | EXPORT_SYMBOL(kfree_skb); |
2049 | EXPORT_SYMBOL(__pskb_pull_tail); | 2072 | EXPORT_SYMBOL(__pskb_pull_tail); |
2050 | EXPORT_SYMBOL(__alloc_skb); | 2073 | EXPORT_SYMBOL(__alloc_skb); |
2074 | EXPORT_SYMBOL(__netdev_alloc_skb); | ||
2051 | EXPORT_SYMBOL(pskb_copy); | 2075 | EXPORT_SYMBOL(pskb_copy); |
2052 | EXPORT_SYMBOL(pskb_expand_head); | 2076 | EXPORT_SYMBOL(pskb_expand_head); |
2053 | EXPORT_SYMBOL(skb_checksum); | 2077 | EXPORT_SYMBOL(skb_checksum); |