lkml.org 
[lkml]   [2012]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 169/218] macvtap: zerocopy: put page when fail to get all requested user pages
    Date
    3.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jason Wang <jasowang@redhat.com>

    commit 02ce04bb3d28c3333231f43bca677228dbc686fe upstream.

    When get_user_pages_fast() fails to get all requested pages, we could not use
    kfree_skb() to free it as it has not been put in the skb fragments. So we need
    to call put_page() instead.

    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/macvtap.c | 7 ++++---
    1 file changed, 4 insertions(+), 3 deletions(-)

    --- a/drivers/net/macvtap.c
    +++ b/drivers/net/macvtap.c
    @@ -533,9 +533,10 @@ static int zerocopy_sg_from_iovec(struct
    if (i + size > MAX_SKB_FRAGS)
    return -EMSGSIZE;
    num_pages = get_user_pages_fast(base, size, 0, &page[i]);
    - if (num_pages != size)
    - /* put_page is in skb free */
    - return -EFAULT;
    + if (num_pages != size) {
    + for (i = 0; i < num_pages; i++)
    + put_page(page[i]);
    + }
    truesize = size * PAGE_SIZE;
    skb->data_len += len;
    skb->len += len;



    \
     
     \ /
      Last update: 2012-09-28 23:41    [W:4.037 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site