|
@@ -158,31 +158,6 @@ out:
|
|
*
|
|
*
|
|
*/
|
|
*/
|
|
|
|
|
|
-struct sk_buff *__alloc_skb_head(gfp_t gfp_mask, int node)
|
|
|
|
-{
|
|
|
|
- struct sk_buff *skb;
|
|
|
|
-
|
|
|
|
- /* Get the HEAD */
|
|
|
|
- skb = kmem_cache_alloc_node(skbuff_head_cache,
|
|
|
|
- gfp_mask & ~__GFP_DMA, node);
|
|
|
|
- if (!skb)
|
|
|
|
- goto out;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Only clear those fields we need to clear, not those that we will
|
|
|
|
- * actually initialise below. Hence, don't put any more fields after
|
|
|
|
- * the tail pointer in struct sk_buff!
|
|
|
|
- */
|
|
|
|
- memset(skb, 0, offsetof(struct sk_buff, tail));
|
|
|
|
- skb->head = NULL;
|
|
|
|
- skb->truesize = sizeof(struct sk_buff);
|
|
|
|
- refcount_set(&skb->users, 1);
|
|
|
|
-
|
|
|
|
- skb->mac_header = (typeof(skb->mac_header))~0U;
|
|
|
|
-out:
|
|
|
|
- return skb;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* __alloc_skb - allocate a network buffer
|
|
* __alloc_skb - allocate a network buffer
|
|
* @size: size to allocate
|
|
* @size: size to allocate
|
|
@@ -663,8 +638,7 @@ void skb_release_head_state(struct sk_buff *skb)
|
|
static void skb_release_all(struct sk_buff *skb)
|
|
static void skb_release_all(struct sk_buff *skb)
|
|
{
|
|
{
|
|
skb_release_head_state(skb);
|
|
skb_release_head_state(skb);
|
|
- if (likely(skb->head))
|
|
|
|
- skb_release_data(skb);
|
|
|
|
|
|
+ skb_release_data(skb);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -762,8 +736,7 @@ void consume_stateless_skb(struct sk_buff *skb)
|
|
return;
|
|
return;
|
|
|
|
|
|
trace_consume_skb(skb);
|
|
trace_consume_skb(skb);
|
|
- if (likely(skb->head))
|
|
|
|
- skb_release_data(skb);
|
|
|
|
|
|
+ skb_release_data(skb);
|
|
kfree_skbmem(skb);
|
|
kfree_skbmem(skb);
|
|
}
|
|
}
|
|
|
|
|