From patchwork Thu Dec 7 17:56:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 845737 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bD0/Q4r1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yt38d3t1Lz9s7v for ; Fri, 8 Dec 2017 04:57:05 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753054AbdLGR45 (ORCPT ); Thu, 7 Dec 2017 12:56:57 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:39756 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752823AbdLGR4z (ORCPT ); Thu, 7 Dec 2017 12:56:55 -0500 Received: by mail-pg0-f65.google.com with SMTP id w7so4972898pgv.6 for ; Thu, 07 Dec 2017 09:56:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=Pw9iGDIot4cq5Iza4KEPkgO+n+KiysCSUPDeLGC8sMU=; b=bD0/Q4r1uXqA1jj8MQGPK3v+nQtmV1C1I0vJaVhlQR7woKKMG4ZLR6KL7rUkI6t3Ri aUUTquMEmpBEaXMQoU4JexNZ69CZosXJ1dxHFNjwk9t+2L0pezXunavJptea4B7vE0B7 hPWzh1HOmBRJVM6vo5wzgXYVp63XmTGkCA3BcbB/5nCCP6Z+C0Cu4PZHEnvzbxmAEpxC 0U34SaFaLrac3QmvX2ALQPevj0RaCrweGD0fv5e49njt6axwonATkQ6SZmvKcKzu13HH h+tYWq4iSxFEEYsBc2nb3lPfC6xcRyt6p2qGNu3eMRxzsPWE3Q/SyiKXsCiMPjueD/x9 sdSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=Pw9iGDIot4cq5Iza4KEPkgO+n+KiysCSUPDeLGC8sMU=; b=SwqSRgVkas9MhgjKCepA20WHMoR3BDZx1k+nHP/OJfLu9B/Y0fnAQxOiYbIYJl3Z94 YYOUYDZe698xxyhZVXQxWOPoSgIdB/Ys8BLNqi+wgjcPsMRHWpJIQtA2fCWMG/K55tz8 YtZn4DbyPVnexAayndyyCX3DW56k/cb8dziV6KwQzdyiIIV9fdDNHFvtg468yZMIPgqt R0gdzQpB5AFmQJI8w+nJzvN57SbWFTHddYobbZYRF1MDWPtSr/JeA3wnj7rChCCf0Q8b fIr1bSEiN9+j3ghg83wcID+GDjMO7yqAFxvD+BJ+zC242S574GZ5/ABFbo7/eKhZErjU F3mA== X-Gm-Message-State: AJaThX6+U+EWMm+TwPB1q13cpO/jEGnUJ/m4fyrJ71xwrt/OcNXdpZJs Li8wVP/7VU6aZ/S2wdJqfQo= X-Google-Smtp-Source: AGs4zMaziJEJeY+q09y38F0eYY6PGqwRAY/IeprOlL/p8IqqpNXJlcmtymydwWfeapYWXhhACK/20w== X-Received: by 10.84.128.197 with SMTP id a63mr26635933pla.212.1512669414779; Thu, 07 Dec 2017 09:56:54 -0800 (PST) Received: from [127.0.1.1] ([72.168.144.118]) by smtp.gmail.com with ESMTPSA id f83sm10897508pfj.23.2017.12.07.09.56.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Dec 2017 09:56:54 -0800 (PST) Subject: [net-next PATCH 09/14] net: sched: check for frozen queue before skb_bad_txq check From: John Fastabend To: willemdebruijn.kernel@gmail.com, daniel@iogearbox.net, eric.dumazet@gmail.com, davem@davemloft.net Cc: netdev@vger.kernel.org, jiri@resnulli.us, xiyou.wangcong@gmail.com Date: Thu, 07 Dec 2017 09:56:42 -0800 Message-ID: <20171207175641.5771.42808.stgit@john-Precision-Tower-5810> In-Reply-To: <20171207173500.5771.41198.stgit@john-Precision-Tower-5810> References: <20171207173500.5771.41198.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org I can not think of any reason to pull the bad txq skb off the qdisc if the txq we plan to send this on is still frozen. So check for frozen queue first and abort before dequeuing either skb_bad_txq skb or normal qdisc dequeue() skb. Signed-off-by: John Fastabend --- net/sched/sch_generic.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 84cef05..5ff93c2 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -204,7 +204,7 @@ static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate, int *packets) { const struct netdev_queue *txq = q->dev_queue; - struct sk_buff *skb; + struct sk_buff *skb = NULL; *packets = 1; if (unlikely(!skb_queue_empty(&q->gso_skb))) { @@ -248,12 +248,15 @@ static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate, } validate: *validate = true; + + if ((q->flags & TCQ_F_ONETXQUEUE) && + netif_xmit_frozen_or_stopped(txq)) + return skb; + skb = qdisc_dequeue_skb_bad_txq(q); if (unlikely(skb)) goto bulk; - if (!(q->flags & TCQ_F_ONETXQUEUE) || - !netif_xmit_frozen_or_stopped(txq)) - skb = q->dequeue(q); + skb = q->dequeue(q); if (skb) { bulk: if (qdisc_may_bulk(q))