skb_condense(9)
π skb_condense β a Kernel API Manual moment (section 9, bestie)
okay so real talk, this is from the Kernel API Manual, section 9, and the whole vibe is "clean up your skb's memory situation before it goes somewhere busy." Let's get into it π«Ά
β¨ NAME β¨
skb_condense β try to get rid of fragments/frag_list if possible
Like, literally just vibes-based defragmentation. if it can, it will π
πΈ SYNOPSIS πΈ
void skb_condense (struct sk_buff *skb );
π¦ ARGUMENTS π¦
skbβ buffer. that's it. that's the whole argument. the buffer in question π
π₯ DESCRIPTION π₯
So here's the tea: you can use this to save memory before skb is added to a busy queue. If the packet has bytes sitting in frags, and there's enough tail room in skb->head, it pulls all of them β so we can free the frags right now and adjust truesize. it's giving "tidying your room before guests arrive" energy, honestly π§Ήβ¨
β NOTES β
Important caveats, no cap:
- We do not reallocate
skb->head, thus it can not fail. iconic, honestly π - Caller must re-evaluate
skb->truesizeif needed. don't forget, bestie β that's on you π
π SEE ALSO π
Kernel file ./net/core/skbuff.c, plus the entire extended friend group of skb functions (yes, all of them, I'm not skipping anyone, that would be rude):
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),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_ext_alloc(9),__skb_ext_set(9),skb_ext_add(9),skb_attempt_defer_free(9),skb_splice_from_iter(9)
okay that's the whole page, mwah π this cutie lives over in ./net/core and the copy you're reading is dated October 2026 β so like, recent. slay. go condense some skbs, bestie ππ¦β¨
π¦ 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