From patchwork Wed Apr 8 15:54:05 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vitaly Kuznetsov X-Patchwork-Id: 459338 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 693A7140134 for ; Thu, 9 Apr 2015 01:55:02 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932392AbbDHPyr (ORCPT ); Wed, 8 Apr 2015 11:54:47 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44572 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932298AbbDHPyM (ORCPT ); Wed, 8 Apr 2015 11:54:12 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 70E688EA51; Wed, 8 Apr 2015 15:54:12 +0000 (UTC) Received: from vitty.brq.redhat.com (vitty.brq.redhat.com [10.34.26.3]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t38Fs78Y024473; Wed, 8 Apr 2015 11:54:10 -0400 From: Vitaly Kuznetsov To: "K. Y. Srinivasan" , Haiyang Zhang , netdev@vger.kernel.org Cc: devel@linuxdriverproject.org, linux-kernel@vger.kernel.org, Jason Wang Subject: [PATCH 1/2] hv_netvsc: use single existing drop path in netvsc_start_xmit Date: Wed, 8 Apr 2015 17:54:05 +0200 Message-Id: <1428508446-18423-2-git-send-email-vkuznets@redhat.com> In-Reply-To: <1428508446-18423-1-git-send-email-vkuznets@redhat.com> References: <1428508446-18423-1-git-send-email-vkuznets@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ... which validly uses dev_kfree_skb_any() instead of dev_kfree_skb(). Setting ret to -EFAULT and -ENOMEM have no real meaning here (we need to set it to anything but -EAGAIN) as we drop the packet and return NETDEV_TX_OK anyway. Signed-off-by: Vitaly Kuznetsov --- drivers/net/hyperv/netvsc_drv.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index e5fa094..9e4230d 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -370,7 +370,7 @@ not_ip: static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) { struct net_device_context *net_device_ctx = netdev_priv(net); - struct hv_netvsc_packet *packet; + struct hv_netvsc_packet *packet = NULL; int ret; unsigned int num_data_pgs; struct rndis_message *rndis_msg; @@ -396,9 +396,8 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) num_data_pgs = netvsc_get_slots(skb) + 2; if (num_data_pgs > MAX_PAGE_BUFFER_COUNT) { netdev_err(net, "Packet too big: %u\n", skb->len); - dev_kfree_skb(skb); - net->stats.tx_dropped++; - return NETDEV_TX_OK; + ret = -EFAULT; + goto drop; } pkt_sz = sizeof(struct hv_netvsc_packet) + RNDIS_AND_PPI_SIZE; @@ -408,9 +407,8 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) if (!packet) { /* out of memory, drop packet */ netdev_err(net, "unable to alloc hv_netvsc_packet\n"); - dev_kfree_skb(skb); - net->stats.tx_dropped++; - return NETDEV_TX_OK; + ret = -ENOMEM; + goto drop; } packet->part_of_skb = false; } else { @@ -574,7 +572,7 @@ drop: net->stats.tx_bytes += skb_length; net->stats.tx_packets++; } else { - if (!packet->part_of_skb) + if (packet && !packet->part_of_skb) kfree(packet); if (ret != -EAGAIN) { dev_kfree_skb_any(skb);