On Wed, 2012-05-16 at 11:04 +0800, Jason Wang wrote:Then this would double count the size of "first" offset left fromsk_buffdiff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index bd4a70d..7cb2684 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -519,6 +519,7 @@ static int zerocopy_sg_from_iovec(struct
sk_buff*skb, const struct iovec *from,
struct page *page[MAX_SKB_FRAGS];
int num_pages;
unsigned long base;
+ unsigned long truesize;
len = from->iov_len - offset;
if (!len) {
@@ -533,10 +534,11 @@ static int zerocopy_sg_from_iovec(struct
We get the whole user page, so need to account them all. Also this is*skb, const struct iovec *from,Here should be truesize = size * PAGE_SIZE - offset, right?
(num_pages> MAX_SKB_FRAGS -
skb_shinfo(skb)->nr_frags))
/* put_page is in skb free */
return -EFAULT;
+ truesize = size * PAGE_SIZE;
aligned with skb_copy_ubufs().
previous copy, both skb->len and truesize.
Thanks
Shirley