From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cong Wang Subject: [Patch net-next v2 3/3] net_sched: implement ->change_tx_queue_len() for pfifo_fast Date: Tue, 23 Jan 2018 10:18:59 -0800 Message-ID: <20180123181859.18583-4-xiyou.wangcong@gmail.com> References: <20180123181859.18583-1-xiyou.wangcong@gmail.com> Cc: john.fastabend@gmail.com, Cong Wang To: netdev@vger.kernel.org Return-path: Received: from mail-pg0-f65.google.com ([74.125.83.65]:36545 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751681AbeAWSTL (ORCPT ); Tue, 23 Jan 2018 13:19:11 -0500 Received: by mail-pg0-f65.google.com with SMTP id k68so841296pga.3 for ; Tue, 23 Jan 2018 10:19:10 -0800 (PST) In-Reply-To: <20180123181859.18583-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 | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 08f9fa27e06e..d7b82c379617 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -763,6 +763,22 @@ static void pfifo_fast_destroy(struct Qdisc *sch) } } +static int pfifo_fast_change_tx_queue_len(struct Qdisc *sch, unsigned int new_len) +{ + struct pfifo_fast_priv *priv = qdisc_priv(sch); + int ret = 0, prio; + + for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) { + struct skb_array *q = band2list(priv, prio); + + ret = skb_array_resize(q, new_len, GFP_KERNEL); + if (ret) + break; + } + + return ret; +} + struct Qdisc_ops pfifo_fast_ops __read_mostly = { .id = "pfifo_fast", .priv_size = sizeof(struct pfifo_fast_priv), @@ -773,6 +789,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