v1
2026-11-04
移除 skb->pp_recycle 位域 · v1
删除 skb->pp_recycle 与 skb_mark_for_recycle()、skb_netmem_ref(),改在 netmem_inc/dec_ref() 中通过 netmem_is_pp() 按底层类型统一引用计数,回收 1 bit 并减少约 110 行代码。
原始补丁链接
子 Patch(5)
1/5
net: skbuff: skip managed zerocopy frags in skb_frag_ref()
让 skb_frag_ref() 对 SKBFL_MANAGED_FRAG_REFS 的 zerocopy SKB 不再取引用,与 skb_frag_unref()/skb_release_data() 配对;并在 iptfs_output_queued() 对 managed SKB 关闭 share_ok,防止无引用 fragment 被合入外层。
2/5
net: skbuff: refcount spliced page_pool frags via skb_pipe_buf_ops
在 skb_splice_bits()/skb_append_pagefrags() 中改用 netmem_inc_ref()/netmem_dec_ref()/skb_frag_ref() 管理 page_pool RX fragment 引用,使 splice 到 pipe 的页在消费前保持池内 pin,并与 TX skb_release_data() 配对。
3/5
net: datagram: refcount page_pool frags in zerocopy_fill_skb_from_iter()
在 zerocopy_fill_skb_from_iter() 附加 page_pool fragment 时用 netmem_inc_ref() 取池引用,并撤销 iov_iter_get_pages2() 的 page->_refcount,使 TX skb 释放走 netmem_dec_ref(),避免页池页引用计数不匹配。
4/5
net: remove skb->pp_recycle and consolidate netmem refcounting
删除 skb->pp_recycle,改由 netmem_inc_ref()/netmem_dec_ref()/skb_pp_recycle() 直接按 netmem_is_pp() 分派 page_pool 与普通页引用,避免 SKB 克隆/切分/合并时位状态不一致;普通页检查复用同一缓存行。
5/5
net: remove skb_mark_for_recycle()
删除已无作用的 skb_mark_for_recycle() 空桩及所有驱动调用和文档引用,因为 page_pool 回收已由 netmem_is_pp() 在 netmem 引用路径中自动处理。