mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
net_sched: use qdisc_dequeue_drop() in cake, codel, fq_codel
cake, codel and fq_codel can drop many packets from dequeue(). Use qdisc_dequeue_drop() so that the freeing can happen outside of the qdisc spinlock scope. Add TCQ_F_DEQUEUE_DROPS to sch->flags. Signed-off-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20251121083256.674562-15-edumazet@google.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
191ff13e42
commit
a6efc273ab
@@ -2183,7 +2183,7 @@ retry:
|
||||
b->tin_dropped++;
|
||||
qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(skb));
|
||||
qdisc_qstats_drop(sch);
|
||||
kfree_skb_reason(skb, reason);
|
||||
qdisc_dequeue_drop(sch, skb, reason);
|
||||
if (q->rate_flags & CAKE_FLAG_INGRESS)
|
||||
goto retry;
|
||||
}
|
||||
@@ -2724,6 +2724,8 @@ static int cake_init(struct Qdisc *sch, struct nlattr *opt,
|
||||
int i, j, err;
|
||||
|
||||
sch->limit = 10240;
|
||||
sch->flags |= TCQ_F_DEQUEUE_DROPS;
|
||||
|
||||
q->tin_mode = CAKE_DIFFSERV_DIFFSERV3;
|
||||
q->flow_mode = CAKE_FLOW_TRIPLE;
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ static void drop_func(struct sk_buff *skb, void *ctx)
|
||||
{
|
||||
struct Qdisc *sch = ctx;
|
||||
|
||||
kfree_skb_reason(skb, SKB_DROP_REASON_QDISC_CONGESTED);
|
||||
qdisc_dequeue_drop(sch, skb, SKB_DROP_REASON_QDISC_CONGESTED);
|
||||
qdisc_qstats_drop(sch);
|
||||
}
|
||||
|
||||
@@ -182,6 +182,8 @@ static int codel_init(struct Qdisc *sch, struct nlattr *opt,
|
||||
else
|
||||
sch->flags &= ~TCQ_F_CAN_BYPASS;
|
||||
|
||||
sch->flags |= TCQ_F_DEQUEUE_DROPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -275,7 +275,7 @@ static void drop_func(struct sk_buff *skb, void *ctx)
|
||||
{
|
||||
struct Qdisc *sch = ctx;
|
||||
|
||||
kfree_skb_reason(skb, SKB_DROP_REASON_QDISC_CONGESTED);
|
||||
qdisc_dequeue_drop(sch, skb, SKB_DROP_REASON_QDISC_CONGESTED);
|
||||
qdisc_qstats_drop(sch);
|
||||
}
|
||||
|
||||
@@ -519,6 +519,9 @@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt,
|
||||
sch->flags |= TCQ_F_CAN_BYPASS;
|
||||
else
|
||||
sch->flags &= ~TCQ_F_CAN_BYPASS;
|
||||
|
||||
sch->flags |= TCQ_F_DEQUEUE_DROPS;
|
||||
|
||||
return 0;
|
||||
|
||||
alloc_failure:
|
||||
|
||||
Reference in New Issue
Block a user