net_sched: implement ->change_tx_queue_len() for pfifo_fast
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 <john.fastabend@gmail.com> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
48bfd55e7e
commit
7007ba630e
|
@ -763,6 +763,23 @@ 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);
|
||||||
|
struct skb_array *bands[PFIFO_FAST_BANDS];
|
||||||
|
int prio;
|
||||||
|
|
||||||
|
for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
|
||||||
|
struct skb_array *q = band2list(priv, prio);
|
||||||
|
|
||||||
|
bands[prio] = q;
|
||||||
|
}
|
||||||
|
|
||||||
|
return skb_array_resize_multiple(bands, PFIFO_FAST_BANDS, new_len,
|
||||||
|
GFP_KERNEL);
|
||||||
|
}
|
||||||
|
|
||||||
struct Qdisc_ops pfifo_fast_ops __read_mostly = {
|
struct Qdisc_ops pfifo_fast_ops __read_mostly = {
|
||||||
.id = "pfifo_fast",
|
.id = "pfifo_fast",
|
||||||
.priv_size = sizeof(struct pfifo_fast_priv),
|
.priv_size = sizeof(struct pfifo_fast_priv),
|
||||||
|
@ -773,6 +790,7 @@ struct Qdisc_ops pfifo_fast_ops __read_mostly = {
|
||||||
.destroy = pfifo_fast_destroy,
|
.destroy = pfifo_fast_destroy,
|
||||||
.reset = pfifo_fast_reset,
|
.reset = pfifo_fast_reset,
|
||||||
.dump = pfifo_fast_dump,
|
.dump = pfifo_fast_dump,
|
||||||
|
.change_tx_queue_len = pfifo_fast_change_tx_queue_len,
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.static_flags = TCQ_F_NOLOCK | TCQ_F_CPUSTATS,
|
.static_flags = TCQ_F_NOLOCK | TCQ_F_CPUSTATS,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue