Merge tag 'v3.10.92' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / core / skbuff.c
CommitLineData
1da177e4
LT
1/*
2 * Routines having to do with the 'struct sk_buff' memory handlers.
3 *
113aa838 4 * Authors: Alan Cox <alan@lxorguk.ukuu.org.uk>
1da177e4
LT
5 * Florian La Roche <rzsfl@rz.uni-sb.de>
6 *
1da177e4
LT
7 * Fixes:
8 * Alan Cox : Fixed the worst of the load
9 * balancer bugs.
10 * Dave Platt : Interrupt stacking fix.
11 * Richard Kooijman : Timestamp fixes.
12 * Alan Cox : Changed buffer format.
13 * Alan Cox : destructor hook for AF_UNIX etc.
14 * Linus Torvalds : Better skb_clone.
15 * Alan Cox : Added skb_copy.
16 * Alan Cox : Added all the changed routines Linus
17 * only put in the headers
18 * Ray VanTassle : Fixed --skb->lock in free
19 * Alan Cox : skb_copy copy arp field
20 * Andi Kleen : slabified it.
21 * Robert Olsson : Removed skb_head_pool
22 *
23 * NOTE:
24 * The __skb_ routines should be called with interrupts
25 * disabled, or you better be *real* sure that the operation is atomic
26 * with respect to whatever list is being frobbed (e.g. via lock_sock()
27 * or via disabling bottom half handlers, etc).
28 *
29 * This program is free software; you can redistribute it and/or
30 * modify it under the terms of the GNU General Public License
31 * as published by the Free Software Foundation; either version
32 * 2 of the License, or (at your option) any later version.
33 */
34
35/*
36 * The functions in this file will not compile correctly with gcc 2.4.x
37 */
38
e005d193
JP
39#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
40
1da177e4
LT
41#include <linux/module.h>
42#include <linux/types.h>
43#include <linux/kernel.h>
fe55f6d5 44#include <linux/kmemcheck.h>
1da177e4
LT
45#include <linux/mm.h>
46#include <linux/interrupt.h>
47#include <linux/in.h>
48#include <linux/inet.h>
49#include <linux/slab.h>
3fb03b59
FW
50#include <linux/tcp.h>
51#include <linux/udp.h>
1da177e4
LT
52#include <linux/netdevice.h>
53#ifdef CONFIG_NET_CLS_ACT
54#include <net/pkt_sched.h>
55#endif
56#include <linux/string.h>
57#include <linux/skbuff.h>
9c55e01c 58#include <linux/splice.h>
1da177e4
LT
59#include <linux/cache.h>
60#include <linux/rtnetlink.h>
61#include <linux/init.h>
716ea3a7 62#include <linux/scatterlist.h>
ac45f602 63#include <linux/errqueue.h>
268bb0ce 64#include <linux/prefetch.h>
1da177e4
LT
65
66#include <net/protocol.h>
67#include <net/dst.h>
68#include <net/sock.h>
69#include <net/checksum.h>
70#include <net/xfrm.h>
71
72#include <asm/uaccess.h>
ad8d75ff 73#include <trace/events/skb.h>
51c56b00 74#include <linux/highmem.h>
a1f8e7f7 75
d7e8883c 76struct kmem_cache *skbuff_head_cache __read_mostly;
e18b890b 77static struct kmem_cache *skbuff_fclone_cache __read_mostly;
1da177e4 78
1da177e4 79/**
f05de73b
JS
80 * skb_panic - private function for out-of-line support
81 * @skb: buffer
82 * @sz: size
83 * @addr: address
99d5851e 84 * @msg: skb_over_panic or skb_under_panic
1da177e4 85 *
f05de73b
JS
86 * Out-of-line support for skb_put() and skb_push().
87 * Called via the wrapper skb_over_panic() or skb_under_panic().
88 * Keep out of line to prevent kernel bloat.
89 * __builtin_return_address is not used because it is not always reliable.
1da177e4 90 */
f05de73b 91static void skb_panic(struct sk_buff *skb, unsigned int sz, void *addr,
99d5851e 92 const char msg[])
1da177e4 93{
e005d193 94 pr_emerg("%s: text:%p len:%d put:%d head:%p data:%p tail:%#lx end:%#lx dev:%s\n",
99d5851e 95 msg, addr, skb->len, sz, skb->head, skb->data,
e005d193
JP
96 (unsigned long)skb->tail, (unsigned long)skb->end,
97 skb->dev ? skb->dev->name : "<NULL>");
1da177e4
LT
98 BUG();
99}
100
f05de73b 101static void skb_over_panic(struct sk_buff *skb, unsigned int sz, void *addr)
1da177e4 102{
f05de73b 103 skb_panic(skb, sz, addr, __func__);
1da177e4
LT
104}
105
f05de73b
JS
106static void skb_under_panic(struct sk_buff *skb, unsigned int sz, void *addr)
107{
108 skb_panic(skb, sz, addr, __func__);
109}
c93bdd0e
MG
110
111/*
112 * kmalloc_reserve is a wrapper around kmalloc_node_track_caller that tells
113 * the caller if emergency pfmemalloc reserves are being used. If it is and
114 * the socket is later found to be SOCK_MEMALLOC then PFMEMALLOC reserves
115 * may be used. Otherwise, the packet data may be discarded until enough
116 * memory is free
117 */
118#define kmalloc_reserve(size, gfp, node, pfmemalloc) \
119 __kmalloc_reserve(size, gfp, node, _RET_IP_, pfmemalloc)
61c5e88a 120
121static void *__kmalloc_reserve(size_t size, gfp_t flags, int node,
122 unsigned long ip, bool *pfmemalloc)
c93bdd0e
MG
123{
124 void *obj;
125 bool ret_pfmemalloc = false;
126
127 /*
128 * Try a regular allocation, when that fails and we're not entitled
129 * to the reserves, fail.
130 */
131 obj = kmalloc_node_track_caller(size,
132 flags | __GFP_NOMEMALLOC | __GFP_NOWARN,
133 node);
134 if (obj || !(gfp_pfmemalloc_allowed(flags)))
135 goto out;
136
137 /* Try again but now we are using pfmemalloc reserves */
138 ret_pfmemalloc = true;
139 obj = kmalloc_node_track_caller(size, flags, node);
140
141out:
142 if (pfmemalloc)
143 *pfmemalloc = ret_pfmemalloc;
144
145 return obj;
146}
147
1da177e4
LT
148/* Allocate a new skbuff. We do this ourselves so we can fill in a few
149 * 'private' fields and also do memory statistics to find all the
150 * [BEEP] leaks.
151 *
152 */
153
0ebd0ac5
PM
154struct sk_buff *__alloc_skb_head(gfp_t gfp_mask, int node)
155{
156 struct sk_buff *skb;
157
158 /* Get the HEAD */
159 skb = kmem_cache_alloc_node(skbuff_head_cache,
160 gfp_mask & ~__GFP_DMA, node);
161 if (!skb)
162 goto out;
163
164 /*
165 * Only clear those fields we need to clear, not those that we will
166 * actually initialise below. Hence, don't put any more fields after
167 * the tail pointer in struct sk_buff!
168 */
169 memset(skb, 0, offsetof(struct sk_buff, tail));
5e71d9d7 170 skb->head = NULL;
0ebd0ac5
PM
171 skb->truesize = sizeof(struct sk_buff);
172 atomic_set(&skb->users, 1);
173
174#ifdef NET_SKBUFF_DATA_USES_OFFSET
175 skb->mac_header = ~0U;
176#endif
177out:
178 return skb;
179}
180
1da177e4 181/**
d179cd12 182 * __alloc_skb - allocate a network buffer
1da177e4
LT
183 * @size: size to allocate
184 * @gfp_mask: allocation mask
c93bdd0e
MG
185 * @flags: If SKB_ALLOC_FCLONE is set, allocate from fclone cache
186 * instead of head cache and allocate a cloned (child) skb.
187 * If SKB_ALLOC_RX is set, __GFP_MEMALLOC will be used for
188 * allocations in case the data is required for writeback
b30973f8 189 * @node: numa node to allocate memory on
1da177e4
LT
190 *
191 * Allocate a new &sk_buff. The returned buffer has no headroom and a
94b6042c
BH
192 * tail room of at least size bytes. The object has a reference count
193 * of one. The return is the buffer. On a failure the return is %NULL.
1da177e4
LT
194 *
195 * Buffers may only be allocated from interrupts using a @gfp_mask of
196 * %GFP_ATOMIC.
197 */
dd0fc66f 198struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
c93bdd0e 199 int flags, int node)
1da177e4 200{
e18b890b 201 struct kmem_cache *cache;
4947d3ef 202 struct skb_shared_info *shinfo;
1da177e4
LT
203 struct sk_buff *skb;
204 u8 *data;
c93bdd0e 205 bool pfmemalloc;
1da177e4 206
c93bdd0e
MG
207 cache = (flags & SKB_ALLOC_FCLONE)
208 ? skbuff_fclone_cache : skbuff_head_cache;
209
210 if (sk_memalloc_socks() && (flags & SKB_ALLOC_RX))
211 gfp_mask |= __GFP_MEMALLOC;
8798b3fb 212
1da177e4 213 /* Get the HEAD */
b30973f8 214 skb = kmem_cache_alloc_node(cache, gfp_mask & ~__GFP_DMA, node);
1da177e4
LT
215 if (!skb)
216 goto out;
ec7d2f2c 217 prefetchw(skb);
1da177e4 218
87fb4b7b
ED
219 /* We do our best to align skb_shared_info on a separate cache
220 * line. It usually works because kmalloc(X > SMP_CACHE_BYTES) gives
221 * aligned memory blocks, unless SLUB/SLAB debug is enabled.
222 * Both skb->head and skb_shared_info are cache line aligned.
223 */
bc417e30 224 size = SKB_DATA_ALIGN(size);
87fb4b7b 225 size += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
c93bdd0e 226 data = kmalloc_reserve(size, gfp_mask, node, &pfmemalloc);
1da177e4
LT
227 if (!data)
228 goto nodata;
87fb4b7b
ED
229 /* kmalloc(size) might give us more room than requested.
230 * Put skb_shared_info exactly at the end of allocated zone,
231 * to allow max possible filling before reallocation.
232 */
233 size = SKB_WITH_OVERHEAD(ksize(data));
ec7d2f2c 234 prefetchw(data + size);
1da177e4 235
ca0605a7 236 /*
c8005785
JB
237 * Only clear those fields we need to clear, not those that we will
238 * actually initialise below. Hence, don't put any more fields after
239 * the tail pointer in struct sk_buff!
ca0605a7
ACM
240 */
241 memset(skb, 0, offsetof(struct sk_buff, tail));
87fb4b7b
ED
242 /* Account for allocated memory : skb + skb->head */
243 skb->truesize = SKB_TRUESIZE(size);
c93bdd0e 244 skb->pfmemalloc = pfmemalloc;
1da177e4
LT
245 atomic_set(&skb->users, 1);
246 skb->head = data;
247 skb->data = data;
27a884dc 248 skb_reset_tail_pointer(skb);
4305b541 249 skb->end = skb->tail + size;
19633e12
SH
250#ifdef NET_SKBUFF_DATA_USES_OFFSET
251 skb->mac_header = ~0U;
fda55eca 252 skb->transport_header = ~0U;
19633e12
SH
253#endif
254
4947d3ef
BL
255 /* make sure we initialize shinfo sequentially */
256 shinfo = skb_shinfo(skb);
ec7d2f2c 257 memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));
4947d3ef 258 atomic_set(&shinfo->dataref, 1);
c2aa3665 259 kmemcheck_annotate_variable(shinfo->destructor_arg);
4947d3ef 260
c93bdd0e 261 if (flags & SKB_ALLOC_FCLONE) {
d179cd12
DM
262 struct sk_buff *child = skb + 1;
263 atomic_t *fclone_ref = (atomic_t *) (child + 1);
1da177e4 264
fe55f6d5
VN
265 kmemcheck_annotate_bitfield(child, flags1);
266 kmemcheck_annotate_bitfield(child, flags2);
d179cd12
DM
267 skb->fclone = SKB_FCLONE_ORIG;
268 atomic_set(fclone_ref, 1);
269
270 child->fclone = SKB_FCLONE_UNAVAILABLE;
c93bdd0e 271 child->pfmemalloc = pfmemalloc;
d179cd12 272 }
1da177e4
LT
273out:
274 return skb;
275nodata:
8798b3fb 276 kmem_cache_free(cache, skb);
1da177e4
LT
277 skb = NULL;
278 goto out;
1da177e4 279}
b4ac530f 280EXPORT_SYMBOL(__alloc_skb);
1da177e4 281
b2b5ce9d
ED
282/**
283 * build_skb - build a network buffer
284 * @data: data buffer provided by caller
d3836f21 285 * @frag_size: size of fragment, or 0 if head was kmalloced
b2b5ce9d
ED
286 *
287 * Allocate a new &sk_buff. Caller provides space holding head and
288 * skb_shared_info. @data must have been allocated by kmalloc()
289 * The return is the new skb buffer.
290 * On a failure the return is %NULL, and @data is not freed.
291 * Notes :
292 * Before IO, driver allocates only data buffer where NIC put incoming frame
293 * Driver should add room at head (NET_SKB_PAD) and
294 * MUST add room at tail (SKB_DATA_ALIGN(skb_shared_info))
295 * After IO, driver calls build_skb(), to allocate sk_buff and populate it
296 * before giving packet to stack.
297 * RX rings only contains data buffers, not full skbs.
298 */
d3836f21 299struct sk_buff *build_skb(void *data, unsigned int frag_size)
b2b5ce9d
ED
300{
301 struct skb_shared_info *shinfo;
302 struct sk_buff *skb;
d3836f21 303 unsigned int size = frag_size ? : ksize(data);
b2b5ce9d
ED
304
305 skb = kmem_cache_alloc(skbuff_head_cache, GFP_ATOMIC);
306 if (!skb)
307 return NULL;
308
d3836f21 309 size -= SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
b2b5ce9d
ED
310
311 memset(skb, 0, offsetof(struct sk_buff, tail));
312 skb->truesize = SKB_TRUESIZE(size);
d3836f21 313 skb->head_frag = frag_size != 0;
b2b5ce9d
ED
314 atomic_set(&skb->users, 1);
315 skb->head = data;
316 skb->data = data;
317 skb_reset_tail_pointer(skb);
318 skb->end = skb->tail + size;
319#ifdef NET_SKBUFF_DATA_USES_OFFSET
320 skb->mac_header = ~0U;
fda55eca 321 skb->transport_header = ~0U;
b2b5ce9d
ED
322#endif
323
324 /* make sure we initialize shinfo sequentially */
325 shinfo = skb_shinfo(skb);
326 memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));
327 atomic_set(&shinfo->dataref, 1);
328 kmemcheck_annotate_variable(shinfo->destructor_arg);
329
330 return skb;
331}
332EXPORT_SYMBOL(build_skb);
333
a1c7fff7 334struct netdev_alloc_cache {
69b08f62
ED
335 struct page_frag frag;
336 /* we maintain a pagecount bias, so that we dont dirty cache line
337 * containing page->_count every time we allocate a fragment.
338 */
339 unsigned int pagecnt_bias;
a1c7fff7
ED
340};
341static DEFINE_PER_CPU(struct netdev_alloc_cache, netdev_alloc_cache);
342
c93bdd0e 343static void *__netdev_alloc_frag(unsigned int fragsz, gfp_t gfp_mask)
6f532612
ED
344{
345 struct netdev_alloc_cache *nc;
346 void *data = NULL;
69b08f62 347 int order;
6f532612
ED
348 unsigned long flags;
349
350 local_irq_save(flags);
351 nc = &__get_cpu_var(netdev_alloc_cache);
69b08f62 352 if (unlikely(!nc->frag.page)) {
6f532612 353refill:
69b08f62
ED
354 for (order = NETDEV_FRAG_PAGE_MAX_ORDER; ;) {
355 gfp_t gfp = gfp_mask;
356
357 if (order)
358 gfp |= __GFP_COMP | __GFP_NOWARN;
359 nc->frag.page = alloc_pages(gfp, order);
360 if (likely(nc->frag.page))
361 break;
362 if (--order < 0)
363 goto end;
364 }
365 nc->frag.size = PAGE_SIZE << order;
540eb7bf 366recycle:
69b08f62
ED
367 atomic_set(&nc->frag.page->_count, NETDEV_PAGECNT_MAX_BIAS);
368 nc->pagecnt_bias = NETDEV_PAGECNT_MAX_BIAS;
369 nc->frag.offset = 0;
6f532612 370 }
540eb7bf 371
69b08f62 372 if (nc->frag.offset + fragsz > nc->frag.size) {
540eb7bf 373 /* avoid unnecessary locked operations if possible */
69b08f62
ED
374 if ((atomic_read(&nc->frag.page->_count) == nc->pagecnt_bias) ||
375 atomic_sub_and_test(nc->pagecnt_bias, &nc->frag.page->_count))
540eb7bf
AD
376 goto recycle;
377 goto refill;
6f532612 378 }
540eb7bf 379
69b08f62
ED
380 data = page_address(nc->frag.page) + nc->frag.offset;
381 nc->frag.offset += fragsz;
540eb7bf
AD
382 nc->pagecnt_bias--;
383end:
6f532612
ED
384 local_irq_restore(flags);
385 return data;
386}
c93bdd0e
MG
387
388/**
389 * netdev_alloc_frag - allocate a page fragment
390 * @fragsz: fragment size
391 *
392 * Allocates a frag from a page for receive buffer.
393 * Uses GFP_ATOMIC allocations.
394 */
395void *netdev_alloc_frag(unsigned int fragsz)
396{
397 return __netdev_alloc_frag(fragsz, GFP_ATOMIC | __GFP_COLD);
398}
6f532612
ED
399EXPORT_SYMBOL(netdev_alloc_frag);
400
8af27456
CH
401/**
402 * __netdev_alloc_skb - allocate an skbuff for rx on a specific device
403 * @dev: network device to receive on
404 * @length: length to allocate
405 * @gfp_mask: get_free_pages mask, passed to alloc_skb
406 *
407 * Allocate a new &sk_buff and assign it a usage count of one. The
408 * buffer has unspecified headroom built in. Users should allocate
409 * the headroom they think they need without accounting for the
410 * built in space. The built in space is used for optimisations.
411 *
412 * %NULL is returned if there is no free memory.
413 */
414struct sk_buff *__netdev_alloc_skb(struct net_device *dev,
6f532612 415 unsigned int length, gfp_t gfp_mask)
8af27456 416{
6f532612 417 struct sk_buff *skb = NULL;
a1c7fff7
ED
418 unsigned int fragsz = SKB_DATA_ALIGN(length + NET_SKB_PAD) +
419 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
420
310e158c 421 if (fragsz <= PAGE_SIZE && !(gfp_mask & (__GFP_WAIT | GFP_DMA))) {
c93bdd0e
MG
422 void *data;
423
424 if (sk_memalloc_socks())
425 gfp_mask |= __GFP_MEMALLOC;
426
427 data = __netdev_alloc_frag(fragsz, gfp_mask);
a1c7fff7 428
6f532612
ED
429 if (likely(data)) {
430 skb = build_skb(data, fragsz);
431 if (unlikely(!skb))
432 put_page(virt_to_head_page(data));
a1c7fff7 433 }
a1c7fff7 434 } else {
c93bdd0e
MG
435 skb = __alloc_skb(length + NET_SKB_PAD, gfp_mask,
436 SKB_ALLOC_RX, NUMA_NO_NODE);
a1c7fff7 437 }
7b2e497a 438 if (likely(skb)) {
8af27456 439 skb_reserve(skb, NET_SKB_PAD);
7b2e497a
CH
440 skb->dev = dev;
441 }
8af27456
CH
442 return skb;
443}
b4ac530f 444EXPORT_SYMBOL(__netdev_alloc_skb);
1da177e4 445
654bed16 446void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, int off,
50269e19 447 int size, unsigned int truesize)
654bed16
PZ
448{
449 skb_fill_page_desc(skb, i, page, off, size);
450 skb->len += size;
451 skb->data_len += size;
50269e19 452 skb->truesize += truesize;
654bed16
PZ
453}
454EXPORT_SYMBOL(skb_add_rx_frag);
455
27b437c8 456static void skb_drop_list(struct sk_buff **listp)
1da177e4 457{
bd8a7036 458 kfree_skb_list(*listp);
27b437c8 459 *listp = NULL;
1da177e4
LT
460}
461
27b437c8
HX
462static inline void skb_drop_fraglist(struct sk_buff *skb)
463{
464 skb_drop_list(&skb_shinfo(skb)->frag_list);
465}
466
1da177e4
LT
467static void skb_clone_fraglist(struct sk_buff *skb)
468{
469 struct sk_buff *list;
470
fbb398a8 471 skb_walk_frags(skb, list)
1da177e4
LT
472 skb_get(list);
473}
474
d3836f21
ED
475static void skb_free_head(struct sk_buff *skb)
476{
477 if (skb->head_frag)
478 put_page(virt_to_head_page(skb->head));
479 else
480 kfree(skb->head);
481}
482
5bba1712 483static void skb_release_data(struct sk_buff *skb)
1da177e4
LT
484{
485 if (!skb->cloned ||
486 !atomic_sub_return(skb->nohdr ? (1 << SKB_DATAREF_SHIFT) + 1 : 1,
487 &skb_shinfo(skb)->dataref)) {
488 if (skb_shinfo(skb)->nr_frags) {
489 int i;
490 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
ea2ab693 491 skb_frag_unref(skb, i);
1da177e4
LT
492 }
493
a6686f2f
SM
494 /*
495 * If skb buf is from userspace, we need to notify the caller
496 * the lower device DMA has done;
497 */
498 if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
499 struct ubuf_info *uarg;
500
501 uarg = skb_shinfo(skb)->destructor_arg;
502 if (uarg->callback)
e19d6763 503 uarg->callback(uarg, true);
a6686f2f
SM
504 }
505
21dc3301 506 if (skb_has_frag_list(skb))
1da177e4
LT
507 skb_drop_fraglist(skb);
508
d3836f21 509 skb_free_head(skb);
1da177e4
LT
510 }
511}
512
513/*
514 * Free an skbuff by memory without cleaning the state.
515 */
2d4baff8 516static void kfree_skbmem(struct sk_buff *skb)
1da177e4 517{
d179cd12
DM
518 struct sk_buff *other;
519 atomic_t *fclone_ref;
520
d179cd12
DM
521 switch (skb->fclone) {
522 case SKB_FCLONE_UNAVAILABLE:
523 kmem_cache_free(skbuff_head_cache, skb);
524 break;
525
526 case SKB_FCLONE_ORIG:
527 fclone_ref = (atomic_t *) (skb + 2);
528 if (atomic_dec_and_test(fclone_ref))
529 kmem_cache_free(skbuff_fclone_cache, skb);
530 break;
531
532 case SKB_FCLONE_CLONE:
533 fclone_ref = (atomic_t *) (skb + 1);
534 other = skb - 1;
535
536 /* The clone portion is available for
537 * fast-cloning again.
538 */
539 skb->fclone = SKB_FCLONE_UNAVAILABLE;
540
541 if (atomic_dec_and_test(fclone_ref))
542 kmem_cache_free(skbuff_fclone_cache, other);
543 break;
3ff50b79 544 }
1da177e4
LT
545}
546
04a4bb55 547static void skb_release_head_state(struct sk_buff *skb)
1da177e4 548{
adf30907 549 skb_dst_drop(skb);
1da177e4
LT
550#ifdef CONFIG_XFRM
551 secpath_put(skb->sp);
552#endif
9c2b3328
SH
553 if (skb->destructor) {
554 WARN_ON(in_irq());
1da177e4
LT
555 skb->destructor(skb);
556 }
a3bf7ae9 557#if IS_ENABLED(CONFIG_NF_CONNTRACK)
5f79e0f9 558 nf_conntrack_put(skb->nfct);
2fc72c7b 559#endif
1da177e4
LT
560#ifdef CONFIG_BRIDGE_NETFILTER
561 nf_bridge_put(skb->nf_bridge);
562#endif
1da177e4
LT
563/* XXX: IS this still necessary? - JHS */
564#ifdef CONFIG_NET_SCHED
565 skb->tc_index = 0;
566#ifdef CONFIG_NET_CLS_ACT
567 skb->tc_verd = 0;
1da177e4
LT
568#endif
569#endif
04a4bb55
LB
570}
571
572/* Free everything but the sk_buff shell. */
573static void skb_release_all(struct sk_buff *skb)
574{
575 skb_release_head_state(skb);
5e71d9d7 576 if (likely(skb->head))
0ebd0ac5 577 skb_release_data(skb);
2d4baff8
HX
578}
579
580/**
581 * __kfree_skb - private function
582 * @skb: buffer
583 *
584 * Free an sk_buff. Release anything attached to the buffer.
585 * Clean the state. This is an internal helper function. Users should
586 * always call kfree_skb
587 */
1da177e4 588
2d4baff8
HX
589void __kfree_skb(struct sk_buff *skb)
590{
591 skb_release_all(skb);
1da177e4
LT
592 kfree_skbmem(skb);
593}
b4ac530f 594EXPORT_SYMBOL(__kfree_skb);
1da177e4 595