skb_postpush_data_move(9)
π skb_postpush_data_move(9) β straight out of the Kernel API Manual β¨
okay so bestie, welcome to the glow-up era of skb_postpush_data_move β a little kernel function that quietly does the most after you've already shoved bytes onto your packet. no cap, it's giving "the cleanup crew that arrives after the main character walked in." π
πΈ NAME
skb_postpush_data_move β Move packet data and metadata after skb_push(). π¦
like, both. data and metadata. it's an overachiever fr fr.
β¨ SYNOPSIS
void skb_postpush_data_move (struct sk_buff *skb , const unsigned int
len , const unsigned int n );
π«Ά ARGUMENTS
skbβ the packet you're operating on π like, the whole vibe you're working withlenβ how many bytes got pushed ontosk_buff->dataπ₯nβ how many bytes tomemmovefrom the pre-pushsk_buff->dataπ
π DESCRIPTION
See skb_data_move for details. π§
that's it. that's the whole description. the docs said "go read the other one," and honestly? iconic. lowkey the most efficient documentation ever written. π
no seriously bestie, if you want the actual details, the manpage is pointing you at skb_data_move(9) β go check that one out. π
π SEE ALSO
Kernel file ./include/linux/skbuff.h β the home base for all of this π
π¦ skb basics, geometry & checksums
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)
π dst, refs & allocation
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)
πΈ queues, sharing & cloning
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)
π frags, pages & DMA
__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)__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)
π₯ copy-on-write, linearize, checksums & timestamps
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_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 β you ate that π β¨
this lil legend lives in ./include/linux, stamped October 2026, and it's part of the Kernel API Manual β so next time someone asks about post-push data moving, you can point them here and look like the main character. ππ¦π
π¦ 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