Thread (38 messages) flat view 38 messages, 4 authors, 2011-05-26

Re: [PATCH V5 2/6 net-next] netdevice.h: Add zero-copy flag in netdevice

From: Shirley Ma <hidden>
Date: 2011-05-18 16:02:50
Also in: kvm, lkml

On Wed, 2011-05-18 at 07:38 -0700, Shirley Ma wrote:
On Wed, 2011-05-18 at 13:40 +0200, Michał Mirosław wrote:
quoted
quoted
quoted
quoted
quoted
Not more other restrictions, skb clone is OK.
pskb_expand_head()
quoted
looks
quoted
quoted
quoted
quoted
OK to me from code review.
Hmm. pskb_expand_head calls skb_release_data while keeping
references to pages. How is that ok? What do I miss?
It's making copy of the skb_shinfo earlier, so the pages refcount
stays the same.
Exactly. But the callback is invoked so the guest thinks it's ok
to
quoted
quoted
change this memory. If it does a corrupted packet will be sent
out.
quoted
Hmm. I tool a quick look at skb_clone(), and it looks like this
sequence will break this scheme:

skb2 = skb_clone(skb...);
kfree_skb(skb) or pskb_expand_head(skb);  /* callback called */
[use skb2, pages still referenced]
kfree_skb(skb); /* callback called again */

This sequence is common in bridge, might be in other places.

Maybe this ubuf thing should just track clones? This will make it
work
quoted
on all devices then.
The callback was only invoked when last reference of skb was gone.
skb_clone does increase skb refcnt. I tested tcpdump on lower device,
it
worked.

For the sequence of:

skb_clone  -> last refcnt + 1
kfree_skb() or pskb_expand_head -> callback not called
kfree_skb() -> callback called

I will check page refcount to see whether it's balanced. 
The page refcounts are balanced too. 

In macvtap/vhost Real NIC zerocopy case, it always goes to fastpath in
pskb_expand_head, so I didn't hit any issue.

But rethinking about pskb_expand_head(), it calls skb_release_data() to
free old skb head when it's not in the fastpath (pskb_expand_head is not
the last reference of this skb); And it's impossible to track which skb
head (old one or new one) will be the last one to free. So better to
return error for zero-copy skbs when not using fastpath. Does it make
sense? 

Besides this, any other issue?


Thanks
Shirley
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help