lkml.org 
[lkml]   [2012]   [Jul]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 019/108] macvtap: zerocopy: set SKBTX_DEV_ZEROCOPY only when skb is built successfully
    3.2-stable review patch.  If anyone has any objections, please let me know.

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

    From: Jason Wang <jasowang@redhat.com>

    commit 01d6657b388438def19c8baaea28e742b6ed32ec upstream.

    Current the SKBTX_DEV_ZEROCOPY is set unconditionally after
    zerocopy_sg_from_iovec(), this would lead NULL pointer when macvtap
    fails to build zerocopy skb because destructor_arg was not
    initialized. Solve this by set this flag after the skb were built
    successfully.

    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/net/macvtap.c | 9 +++++----
    1 file changed, 5 insertions(+), 4 deletions(-)

    diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
    index 9ab182a..a4ff694 100644
    --- a/drivers/net/macvtap.c
    +++ b/drivers/net/macvtap.c
    @@ -699,10 +699,9 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
    if (!skb)
    goto err;

    - if (zerocopy) {
    + if (zerocopy)
    err = zerocopy_sg_from_iovec(skb, iv, vnet_hdr_len, count);
    - skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY;
    - } else
    + else
    err = skb_copy_datagram_from_iovec(skb, 0, iv, vnet_hdr_len,
    len);
    if (err)
    @@ -721,8 +720,10 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
    rcu_read_lock_bh();
    vlan = rcu_dereference_bh(q->vlan);
    /* copy skb_ubuf_info for callback when skb has no error */
    - if (zerocopy)
    + if (zerocopy) {
    skb_shinfo(skb)->destructor_arg = m->msg_control;
    + skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY;
    + }
    if (vlan)
    macvlan_start_xmit(skb, vlan->dev);
    else




    \
     
     \ /
      Last update: 2012-07-23 05:22    [W:0.024 / U:1.216 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site