Commit 1d0c0b32 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

net: makes skb_splice_bits() aware of skb->head_frag

__skb_splice_bits() can check if skb to be spliced has its skb->head
mapped to a page fragment, instead of a kmalloc() area.

If so we can avoid a copy of the skb head and get a reference on
underlying page.
Signed-off-by: default avatarEric Dumazet <>
Cc: Ilpo Järvinen <>
Cc: Herbert Xu <>
Cc: Maciej Żenczykowski <>
Cc: Neal Cardwell <>
Cc: Tom Herbert <>
Cc: Jeff Kirsher <>
Cc: Ben Hutchings <>
Cc: Matt Carlson <>
Cc: Michael Chan <>
Signed-off-by: default avatarDavid S. Miller <>
parent 329033f6
......@@ -1699,14 +1699,18 @@ static bool __skb_splice_bits(struct sk_buff *skb, struct pipe_inode_info *pipe,
struct splice_pipe_desc *spd, struct sock *sk)
int seg;
bool head_is_linear = !skb->head_frag;
* map the linear part
/* map the linear part :
* If skb->head_frag is set, this 'linear' part is backed
* by a fragment, and we can avoid a copy.
if (__splice_segment(virt_to_page(skb->data),
(unsigned long) skb->data & (PAGE_SIZE - 1),
offset, len, skb, spd, true, sk, pipe))
offset, len, skb, spd,
sk, pipe))
return true;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment