summaryrefslogtreecommitdiff
path: root/net/core/skbuff.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/skbuff.c')
-rw-r--r--net/core/skbuff.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 8a0a4ca7fa5d..9feea830a4db 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -666,7 +666,12 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
skb = napi_skb_cache_get(true);
if (unlikely(!skb))
return NULL;
+ } else if (!in_hardirq() && !irqs_disabled()) {
+ local_bh_disable();
+ skb = napi_skb_cache_get(false);
+ local_bh_enable();
}
+
if (!skb) {
fallback:
skb = kmem_cache_alloc_node(cache, gfp_mask & ~GFP_DMA, node);