napi_skb_cache_get_bulk(9)
π napi_skb_cache_get_bulk(9) π
okay so bestie, this is a page straight out of the Kernel API Manual (yes, that Kernel API Manual, the one we all live in) and it's all about grabbing a whole little squad of zeroed skb heads out of the cache. literally so iconic of her. π
β¨ NAME β¨
napi_skb_cache_get_bulk β obtain a number of zeroed skb heads from the cache π¦
πΈ SYNOPSIS πΈ
u32 napi_skb_cache_get_bulk (void **skbs , u32 n );
π ARGUMENTS π
skbsβ pointer to an array that's at leastn-sized, and you're gonna fill it up with skb pointers. like, she needs room to work, give her the room. πnβ the number of entries to provide, i.e. how many you're asking for. no cap, this is just the count.
π DESCRIPTION π
So what she does is: she tries to obtain n sk_buff entries from the NAPI percpu cache and writes those pointers into the array you handed her, skbs. β¨
If there are less entries available than you asked for, she tries to replenish the cache and bulk-allocates the diff from the MM layer if needed. the way she just handles it. π₯
Now this next part is the main character detail: the heads are being zeroed with either memset or __GFP_ZERO, so they're ready for {,__}build_skb_around and they don't have any data buffers attached. clean slate, fresh vibe, zero baggage. π«Ά
β οΈ big warning, bestie β this must be called only from the BH context. like, only. don't get cute about it. π
β RETURN β
Returns the number of successfully allocated skbs β that's n if no actual allocation was needed, or if kmem_cache_alloc_bulk didn't fail. slay. π
π§ SEE ALSO π§
Kernel file ./net/core/skbuff.c, plus this whole extended friend group:
drop_reasons_register_subsys(9),drop_reasons_unregister_subsys(9),skb_panic(9),__build_skb(9),build_skb_around(9),__napi_build_skb(9),napi_build_skb(9),__alloc_skb(9),__netdev_alloc_skb(9),napi_alloc_skb(9),skb_pp_cow_data(9),skb_pp_frag_ref(9),__kfree_skb(9),sk_skb_reason_drop(9),skb_tx_error(9),consume_skb(9),__consume_stateless_skb(9),napi_consume_skb(9),alloc_skb_for_msg(9),skb_morph(9),skb_copy_ubufs(9),skb_clone(9),skb_copy(9),__pskb_copy_fclone(9),pskb_expand_head(9),skb_expand_head(9),skb_copy_expand(9),__skb_pad(9),pskb_put(9),skb_put(9),skb_push(9),skb_pull(9),skb_pull_data(9),skb_trim(9),__pskb_pull_tail(9),skb_copy_bits(9),skb_store_bits(9),skb_zerocopy(9),skb_dequeue(9),skb_dequeue_tail(9),skb_queue_purge_reason(9),skb_rbtree_purge(9),skb_queue_head(9),skb_queue_tail(9),skb_unlink(9),skb_append(9),skb_split(9),skb_shift(9),skb_prepare_seq_read(9),skb_seq_read(9),skb_abort_seq_read(9),skb_copy_seq_read(9),skb_find_text(9),skb_pull_rcsum(9),skb_segment(9),skb_to_sgvec(9),skb_cow_data(9),skb_clone_sk(9),skb_partial_csum_set(9),skb_checksum_setup(9),skb_checksum_maybe_trim(9),skb_checksum_trimmed(9),skb_try_coalesce(9),skb_scrub_packet(9),skb_eth_pop(9),skb_eth_push(9),skb_mpls_push(9),skb_mpls_pop(9),skb_mpls_update_lse(9),skb_mpls_dec_ttl(9),alloc_skb_with_frags(9),skb_condense(9),__skb_ext_alloc(9),__skb_ext_set(9),skb_ext_add(9),skb_attempt_defer_free(9),skb_splice_from_iter(9)
and that's the whole page, bestie π β brought to you by ./net/core, dated October 2026, and filed under the manual name napi_skb_cache_get_bulk(9). go forth and allocate responsibly πβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms