skb_orphan_frags(9)
π skb_orphan_frags β Kernel API Manual β¨
okay bestie, this one's from the <pink>Kernel API Manual</pink> (section 9, kernel dev girly stuff), and it's honestly such a niche little function but like, lowkey crucial? let's get into it π«Ά
πΈ NAME πΈ
skb_orphan_frags β orphan the frags contained in a buffer π
β¨ SYNOPSIS β¨
int skb_orphan_frags (struct sk_buff *skb , gfp_t gfp_mask );
that's it. that's the whole vibe check. returns an int, takes two args, slays. π
π ARGUMENTS π
skbβ the buffer we're orphan frags from, bestie. this is the SKB we're operating on β¨gfp_maskβ the allocation mask used for the replacement pages πΈ (yes the mask matters, don't @ me)
π¦ DESCRIPTION π¦
okay so here's the tea β β for each frag in the SKB which needs a destructor (i.e. it has an owner), this function will:
- create a copy of that frag π
- release the original page by calling the destructor π
that's literally it. copy the frag, yeet the original through its destructor, move on to the next one. no cap, that's the whole personality. it's giving "responsible about memory" main character energy π β¨
π₯ SEE ALSO π₯
the reference list on this one is absolutely unhinged in the best way β like girl really said "here's my whole contact list" ππ so buckle up:
- the kernel file
./include/linux/skbuff.hπ skb checksums(9),skb_frag_size(9),skb_frag_size_set(9),skb_frag_size_add(9),skb_frag_size_sub(9),skb_frag_must_loop(9)skb_frag_foreach_page(9),struct skb_shared_hwtstamps(9),dataref and headerless skbs(9),Basic sk_buff geometry(9),struct sk_buff(9),skb_pfmemalloc(9)skb_dst(9),skb_dstref_steal(9),skb_dstref_restore(9),skb_dst_set(9),skb_dst_set_noref(9),skb_dst_is_noref(9)skb_napi_id(9),skb_unref(9),kfree_skb(9),alloc_skb(9),skb_fclone_busy(9),alloc_skb_fclone(9)skb_pad(9),skb_queue_empty(9),skb_queue_empty_lockless(9),skb_queue_is_last(9),skb_queue_is_first(9),skb_queue_next(9)skb_queue_prev(9),skb_get(9),skb_cloned(9),skb_header_cloned(9),__skb_header_release(9),skb_shared(9)skb_share_check(9),skb_unshare(9),skb_peek(9),__skb_peek(9),skb_peek_next(9),skb_peek_tail(9)skb_queue_len(9),skb_queue_len_lockless(9),__skb_queue_head_init(9),skb_queue_splice(9),skb_queue_splice_init(9),skb_queue_splice_tail(9)skb_queue_splice_tail_init(9),__skb_queue_after(9),__skb_queue_head(9),__skb_queue_tail(9),__skb_dequeue(9),__skb_dequeue_tail(9)skb_len_add(9),__skb_fill_netmem_desc(9),skb_fill_page_desc(9),skb_fill_page_desc_noacc(9),skb_headroom(9),skb_tailroom(9)skb_availroom(9),skb_reserve(9),skb_tailroom_reserve(9),skb_reset_transport_header_careful(9),skb_set_transport_header_careful(9),pskb_trim_unique(9)skb_orphan(9),__skb_queue_purge_reason(9),netdev_alloc_frag(9),netdev_alloc_skb(9),__dev_alloc_pages(9),__dev_alloc_page(9)dev_page_is_reusable(9),skb_propagate_pfmemalloc(9),skb_frag_off(9),skb_frag_off_add(9),skb_frag_off_set(9),skb_frag_off_copy(9)skb_frag_net_iov(9),skb_frag_page(9),skb_frag_netmem(9),skb_frag_address(9),skb_frag_address_safe(9),skb_frag_phys(9)skb_frag_page_copy(9),__skb_frag_dma_map(9),skb_clone_writable(9),skb_cow(9),skb_cow_head(9),skb_padto(9)__skb_put_padto(9),skb_put_padto(9),skb_linearize(9),skb_has_shared_frag(9),skb_linearize_cow(9),skb_postpull_rcsum(9)skb_postpush_rcsum(9),skb_push_rcsum(9),pskb_trim_rcsum(9),skb_needs_linearize(9),skb_get_timestamp(9),skb_data_move(9)skb_postpull_data_move(9),skb_postpush_data_move(9),skb_complete_tx_timestamp(9),skb_tstamp_tx(9),skb_tx_timestamp(9),skb_complete_wifi_ack(9)skb_checksum_complete(9),struct skb_ext(9),skb_checksum_none_assert(9),skb_head_is_locked(9)
like I said. the whole contact list. ππ«Ά go read them, they're all iconic in their own way.
ngl bestie, the SEE ALSO section here is longer than the actual function description. that's not a bug, that's just skb lore. π
mwah π that's the page! brought to you courtesy of ./include/linux β October 2026 edition ποΈβ¨ hope this helped, now go orphan some frags responsibly, ily, bye!! πππ¦
π¦ 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