On Thu, 1 Feb 2024 12:34:26 +0100 Lorenzo Bianconi wrote: > > nit: doesn't look all that related to a netif, I'd put it in skbuff.c > > ack, fine. skb_segment_for_xdp() in this case? I think the closest thing we have now is skb_cow_data(), so how about skb_cow_data_pp() or skb_cow_fragged() or skb_cow_something? :) I'm on the fence whether we should split the XDP-ness out. I mean the only two xdp-related things are the headroom and check for xdp_has_frags, so we could also: skb_cow_data_pp(struct page_pool *pool, struct sk_buff **pskb, unsigned int headroom) { ... } skb_cow_data_xdp(struct page_pool *pool, struct sk_buff **pskb, struct bpf_prog *prog) { if (!prog->aux->xdp_has_frags) return -EINVAL; return skb_cow_data_pp(pool, pskb, XDP_PACKET_HEADROOM); } I think it'd increase the chances of reuse. But that's speculative so I'll let you decide if you prefer that or to keep it simple.