Lines Matching defs:sch
144 struct Qdisc *sch;
163 static unsigned int sfq_classify(struct sk_buff *skb, struct Qdisc *sch,
166 struct sfq_sched_data *q = qdisc_priv(sch);
171 if (TC_H_MAJ(skb->priority) == sch->handle &&
293 static unsigned int sfq_drop(struct Qdisc *sch, struct sk_buff **to_free)
295 struct sfq_sched_data *q = qdisc_priv(sch);
310 sch->q.qlen--;
311 qdisc_qstats_backlog_dec(sch, skb);
312 qdisc_drop(skb, sch, to_free);
346 sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free)
348 struct sfq_sched_data *q = qdisc_priv(sch);
356 hash = sfq_classify(skb, sch, &ret);
359 qdisc_qstats_drop(sch);
370 return qdisc_drop(skb, sch, to_free);
389 qdisc_qstats_overlimit(sch);
406 qdisc_qstats_overlimit(sch);
427 return qdisc_drop(skb, sch, to_free);
432 sch->qstats.backlog -= delta;
434 qdisc_drop(head, sch, to_free);
437 qdisc_tree_reduce_backlog(sch, 0, delta);
442 qdisc_qstats_backlog_inc(sch, skb);
461 if (++sch->q.qlen <= q->limit)
465 dropped = sfq_drop(sch, to_free);
470 qdisc_tree_reduce_backlog(sch, 0, dropped - qdisc_pkt_len(skb));
475 qdisc_tree_reduce_backlog(sch, 1, dropped);
480 sfq_dequeue(struct Qdisc *sch)
482 struct sfq_sched_data *q = qdisc_priv(sch);
501 qdisc_bstats_update(sch, skb);
502 sch->q.qlen--;
503 qdisc_qstats_backlog_dec(sch, skb);
521 sfq_reset(struct Qdisc *sch)
525 while ((skb = sfq_dequeue(sch)) != NULL)
535 static void sfq_rehash(struct Qdisc *sch)
537 struct sfq_sched_data *q = qdisc_priv(sch);
571 qdisc_qstats_backlog_dec(sch, skb);
601 sch->q.qlen -= dropped;
602 qdisc_tree_reduce_backlog(sch, dropped, drop_len);
608 struct Qdisc *sch = q->sch;
614 root_lock = qdisc_lock(qdisc_root_sleeping(sch));
618 sfq_rehash(sch);
626 static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
628 struct sfq_sched_data *q = qdisc_priv(sch);
660 sch_tree_lock(sch);
692 qlen = sch->q.qlen;
693 while (sch->q.qlen > q->limit) {
694 dropped += sfq_drop(sch, &to_free);
700 qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped);
707 sch_tree_unlock(sch);
722 static void sfq_destroy(struct Qdisc *sch)
724 struct sfq_sched_data *q = qdisc_priv(sch);
734 static int sfq_init(struct Qdisc *sch, struct nlattr *opt,
737 struct sfq_sched_data *q = qdisc_priv(sch);
741 q->sch = sch;
744 err = tcf_block_get(&q->block, &q->filter_list, sch, extack);
759 q->quantum = psched_mtu(qdisc_dev(sch));
765 int err = sfq_change(sch, opt);
785 sch->flags |= TCQ_F_CAN_BYPASS;
787 sch->flags &= ~TCQ_F_CAN_BYPASS;
791 static int sfq_dump(struct Qdisc *sch, struct sk_buff *skb)
793 struct sfq_sched_data *q = qdisc_priv(sch);
828 static struct Qdisc *sfq_leaf(struct Qdisc *sch, unsigned long arg)
833 static unsigned long sfq_find(struct Qdisc *sch, u32 classid)
838 static unsigned long sfq_bind(struct Qdisc *sch, unsigned long parent,
848 static struct tcf_block *sfq_tcf_block(struct Qdisc *sch, unsigned long cl,
851 struct sfq_sched_data *q = qdisc_priv(sch);
858 static int sfq_dump_class(struct Qdisc *sch, unsigned long cl,
865 static int sfq_dump_class_stats(struct Qdisc *sch, unsigned long cl,
868 struct sfq_sched_data *q = qdisc_priv(sch);
885 static void sfq_walk(struct Qdisc *sch, struct qdisc_walker *arg)
887 struct sfq_sched_data *q = qdisc_priv(sch);
898 if (!tc_qdisc_stats_dump(sch, i + 1, arg))