napi_consume_skb(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

Okay bestie, welcome to napi_consume_skb(9) β€” a Kernel API Manual page that's basically β€œfree this skb in NAPI context and try to feed the skb cache.” The vibes? Very networking. Very β€œI live in NAPI context.” πŸ’…βœ¨

πŸ’– NAME πŸ’–

napi_consume_skb β€” consume skb in NAPI context, try to feed skb cache. Periodt. πŸŽ€

✨ SYNOPSIS ✨

void napi_consume_skb (struct sk_buff *skb , int budget );

It's giving β€œvoid function, two arguments, one job.” πŸ’«

πŸŽ€ ARGUMENTS πŸŽ€

  • skb β€” buffer to free. That's the baby. 🫢
  • budget β€” NAPI budget. Keep it correct, bestie. ✨

πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so here's the tea: if you're passing a non-zero budget, it must come from the budget argument that the core passed to a NAPI poll function. No freelancing, no made-up numbers. πŸ’…

Also note: the core may pass a budget of 0 to NAPI poll β€” for example when it's polling for netpoll / netconsole. So don't panic if you see a zero, it's not a typo. 😌

Passing a budget of 0 is safe from any context, and it turns this function into dev_consume_skb_any. That's the whole switch-up. πŸ’–

🌸 SEE ALSO 🌸

Kernel file ./net/core/skbuff.c β€” and the whole function family: drop_reasons_register_subsys(9), drop_reasons_unregister_subsys(9), skb_panic(9), napi_skb_cache_get_bulk(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), 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) πŸ’œ


Cute sign-off: this page's footer source/version is ./net/core, dated October 2026, for napi_consume_skb(9). Stay hydrated, feed the cache, and may your NAPI budget always be correctly sourced. πŸ«ΆπŸ’–βœ¨

πŸ“¦ where this page comes from