__skb_queue_purge_reason(9)
πΈ __skb_queue_purge_reason β a.k.a. "empty a list" π
okay bestie, so this one's from the Kernel API Manual and honestly? it's giving "quietly does the most important cleanup ever" energy. iconic behavior. let's get into it β¨
β¨ NAME β¨
__skb_queue_purge_reason β literally just empty a list. that's the whole vibe. no cap, that's it π«Ά
π¦ SYNOPSIS π¦
void __skb_queue_purge_reason (struct sk_buff_head *list , enum
skb_drop_reason reason );
look at that signature bestie. two args, no return value, zero drama (void, periodt). π
π ARGUMENTS π
listβ the list you wanna empty out. the target. the main character of this whole operation. πΈreasonβ the drop reason. like, why are we yeeting these buffers? you gotta say. π
π₯ DESCRIPTION π₯
okay so here's the tea β β this function deletes all buffers on an sk_buff list. every single one. gone. π¦
the way it works: each buffer is removed from the list, and one reference gets dropped for each of them. so it's not just a lazy unlink, there's actual refcount business happening. ngl, she's thorough. π
β οΈ no cap, this part matters: this function does not take the list lock. like, at all. so the caller must hold the relevant locks to use it. if you don't, you're on your own and that's a you problem bestie π please lock your lists. i'm literally begging. π
π SEE ALSO π
first up, the source file for all of this:
- Kernel file
./include/linux/skbuff.h
and now the extended friend group β every single one of these, no skips, we don't gatekeep here π«ΆπΊ
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_orphan_frags(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)
and that's the whole page bestie!! π§π this little cutie lives over in ./include/linux and this edition is dated October 2026 β so like, future iconic. go forth, purge your queues, hold your locks, and slay π
β¨π
π¦ 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