aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/macvtap.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index 7c3f84acfdfb..3da557830937 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -453,7 +453,6 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from,
453 int copy = skb_headlen(skb); 453 int copy = skb_headlen(skb);
454 int size, offset1 = 0; 454 int size, offset1 = 0;
455 int i = 0; 455 int i = 0;
456 skb_frag_t *f;
457 456
458 /* Skip over from offset */ 457 /* Skip over from offset */
459 while (count && (offset >= from->iov_len)) { 458 while (count && (offset >= from->iov_len)) {
@@ -503,14 +502,13 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from,
503 skb->truesize += len; 502 skb->truesize += len;
504 atomic_add(len, &skb->sk->sk_wmem_alloc); 503 atomic_add(len, &skb->sk->sk_wmem_alloc);
505 while (len) { 504 while (len) {
506 __skb_fill_page_desc( 505 int off = base & ~PAGE_MASK;
507 skb, i, page[i], 506 int size = min_t(int, len, PAGE_SIZE - off);
508 base & ~PAGE_MASK, 507 __skb_fill_page_desc(skb, i, page[i], off, size);
509 min_t(int, len, PAGE_SIZE - f->page_offset));
510 skb_shinfo(skb)->nr_frags++; 508 skb_shinfo(skb)->nr_frags++;
511 /* increase sk_wmem_alloc */ 509 /* increase sk_wmem_alloc */
512 base += f->size; 510 base += size;
513 len -= f->size; 511 len -= size;
514 i++; 512 i++;
515 } 513 }
516 offset1 = 0; 514 offset1 = 0;