From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cong Wang Subject: [Patch net-next 3/3] net_sched: implement ->change_tx_queue_len() for pfifo_fast Date: Fri, 19 Jan 2018 15:09:33 -0800 Message-ID: <20180119230933.10009-4-xiyou.wangcong@gmail.com> References: <20180119230933.10009-1-xiyou.wangcong@gmail.com> Cc: john.fastabend@gmail.com, Cong Wang To: netdev@vger.kernel.org Return-path: Received: from mail-pg0-f66.google.com ([74.125.83.66]:33448 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752184AbeASXJ5 (ORCPT ); Fri, 19 Jan 2018 18:09:57 -0500 Received: by mail-pg0-f66.google.com with SMTP id u1so2518353pgr.0 for ; Fri, 19 Jan 2018 15:09:57 -0800 (PST) In-Reply-To: <20180119230933.10009-1-xiyou.wangcong@gmail.com> Sender: netdev-owner@vger.kernel.org List-ID: pfifo_fast used to drop based on qdisc_dev(qdisc)->tx_queue_len, so we have to resize skb array when we change tx_queue_len. Other qdiscs which read tx_queue_len are fine because they all save it to sch->limit or somewhere else in qdisc during init. They don't have to implement this, it is nicer if they do so that users don't have to re-configure qdisc after changing tx_queue_len. Cc: John Fastabend Signed-off-by: Cong Wang --- net/sched/sch_generic.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 30aaeb3c1bf1..7c48a6942238 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -763,6 +763,18 @@ static void pfifo_fast_destroy(struct Qdisc *sch) } } +static void pfifo_fast_change_tx_queue_len(struct Qdisc *sch, unsigned int new_len) +{ + struct pfifo_fast_priv *priv = qdisc_priv(sch); + int prio; + + for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) { + struct skb_array *q = band2list(priv, prio); + + skb_array_resize(q, new_len, GFP_KERNEL); + } +} + struct Qdisc_ops pfifo_fast_ops __read_mostly = { .id = "pfifo_fast", .priv_size = sizeof(struct pfifo_fast_priv), @@ -773,6 +785,7 @@ struct Qdisc_ops pfifo_fast_ops __read_mostly = { .destroy = pfifo_fast_destroy, .reset = pfifo_fast_reset, .dump = pfifo_fast_dump, + .change_tx_queue_len = pfifo_fast_change_tx_queue_len, .owner = THIS_MODULE, .static_flags = TCQ_F_NOLOCK | TCQ_F_CPUSTATS, }; -- 2.13.0