From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932083AbcDKS0P (ORCPT ); Mon, 11 Apr 2016 14:26:15 -0400 Received: from mail-pa0-f49.google.com ([209.85.220.49]:36184 "EHLO mail-pa0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752303AbcDKS0N (ORCPT ); Mon, 11 Apr 2016 14:26:13 -0400 Message-ID: <1460399171.6473.562.camel@edumazet-glaptop3.roam.corp.google.com> Subject: Re: [PATCH net v2] net: sched: do not requeue a NULL skb From: Eric Dumazet To: Cong Wang Cc: Lars Persson , Lars Persson , Linux Kernel Network Developers , Jamal Hadi Salim , LKML Date: Mon, 11 Apr 2016 11:26:11 -0700 In-Reply-To: References: <1460355869-13539-1-git-send-email-larper@axis.com> <1460380981.6473.544.camel@edumazet-glaptop3.roam.corp.google.com> <570BA8C7.1000905@axis.com> <1460384551.6473.551.camel@edumazet-glaptop3.roam.corp.google.com> <570BC024.1070504@axis.com> <1460389951.6473.555.camel@edumazet-glaptop3.roam.corp.google.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2016-04-11 at 11:02 -0700, Cong Wang wrote: > I am fine with either way as long as the loop stops on failure. > Folding the test "if (skb)" into one also requires to retake the spinlock. Adding the likely() in this path would probably help as well. diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index f18c35024207..07202d9ac4f6 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -159,12 +159,14 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q, if (validate) skb = validate_xmit_skb_list(skb, dev); - if (skb) { + if (likely(skb)) { HARD_TX_LOCK(dev, txq, smp_processor_id()); if (!netif_xmit_frozen_or_stopped(txq)) skb = dev_hard_start_xmit(skb, dev, txq, &ret); HARD_TX_UNLOCK(dev, txq); + } else { + ... does all and return... } spin_lock(root_lock);