From patchwork Thu Apr 26 13:32:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nogah Frankel X-Patchwork-Id: 905063 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40WygS1Sw9z9ry1 for ; Thu, 26 Apr 2018 23:33:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755725AbeDZNdF (ORCPT ); Thu, 26 Apr 2018 09:33:05 -0400 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:35838 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754516AbeDZNdC (ORCPT ); Thu, 26 Apr 2018 09:33:02 -0400 Received: from Internal Mail-Server by MTLPINE1 (envelope-from nogahf@mellanox.com) with ESMTPS (AES256-SHA encrypted); 26 Apr 2018 16:34:27 +0300 Received: from dev-r-vrt-156.mtr.labs.mlnx (dev-r-vrt-156.mtr.labs.mlnx [10.212.156.1]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id w3QDWwrw006403; Thu, 26 Apr 2018 16:32:58 +0300 From: Nogah Frankel To: netdev@vger.kernel.org Cc: davem@davemloft.net, jiri@resnulli.us, jhs@mojatatu.com, xiyou.wangcong@gmail.com, mlxsw@mellanox.com, Nogah Frankel Subject: [PATCH net-next] net: sch: prio: Set bands to default on delete instead of noop Date: Thu, 26 Apr 2018 16:32:36 +0300 Message-Id: <1524749556-36199-1-git-send-email-nogahf@mellanox.com> X-Mailer: git-send-email 2.4.11 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When a band is created, it is set to the default qdisc, which is "invisible" pfifo. However, if a band is set to a qdisc that is later being deleted, it will be set to noop qdisc. This can cause a packet loss, while there is no clear user indication for it. ("invisible" qdisc are not being shown by default). This patch sets a band to the default qdisc, rather then the noop qdisc, on delete operation. Signed-off-by: Nogah Frankel --- net/sched/sch_prio.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c index 222e53d..6862d23 100644 --- a/net/sched/sch_prio.c +++ b/net/sched/sch_prio.c @@ -314,8 +314,15 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, bool any_qdisc_is_offloaded; int err; - if (new == NULL) - new = &noop_qdisc; + if (!new) { + new = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops, + TC_H_MAKE(sch->handle, band + 1), + extack); + if (!new) + new = &noop_qdisc; + else + qdisc_hash_add(new, true); + } *old = qdisc_replace(sch, new, &q->queues[band]); @@ -332,7 +339,7 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, &graft_offload); /* Don't report error if the graft is part of destroy operation. */ - if (err && new != &noop_qdisc) { + if (err && new->handle) { /* Don't report error if the parent, the old child and the new * one are not offloaded. */