net: sched: introduce tcf block infractructure
[linux-2.6-microblaze.git] / net / sched / sch_qfq.c
index 73c7ac3..076ad03 100644 (file)
@@ -182,6 +182,7 @@ struct qfq_group {
 
 struct qfq_sched {
        struct tcf_proto __rcu *filter_list;
+       struct tcf_block        *block;
        struct Qdisc_class_hash clhash;
 
        u64                     oldV, V;        /* Precise virtual times. */
@@ -582,15 +583,14 @@ static void qfq_put_class(struct Qdisc *sch, unsigned long arg)
                qfq_destroy_class(sch, cl);
 }
 
-static struct tcf_proto __rcu **qfq_tcf_chain(struct Qdisc *sch,
-                                             unsigned long cl)
+static struct tcf_block *qfq_tcf_block(struct Qdisc *sch, unsigned long cl)
 {
        struct qfq_sched *q = qdisc_priv(sch);
 
        if (cl)
                return NULL;
 
-       return &q->filter_list;
+       return q->block;
 }
 
 static unsigned long qfq_bind_tcf(struct Qdisc *sch, unsigned long parent,
@@ -1438,6 +1438,10 @@ static int qfq_init_qdisc(struct Qdisc *sch, struct nlattr *opt)
        int i, j, err;
        u32 max_cl_shift, maxbudg_shift, max_classes;
 
+       err = tcf_block_get(&q->block, &q->filter_list);
+       if (err)
+               return err;
+
        err = qdisc_class_hash_init(&q->clhash);
        if (err < 0)
                return err;
@@ -1492,7 +1496,7 @@ static void qfq_destroy_qdisc(struct Qdisc *sch)
        struct hlist_node *next;
        unsigned int i;
 
-       tcf_destroy_chain(&q->filter_list);
+       tcf_block_put(q->block);
 
        for (i = 0; i < q->clhash.hashsize; i++) {
                hlist_for_each_entry_safe(cl, next, &q->clhash.hash[i],
@@ -1508,7 +1512,7 @@ static const struct Qdisc_class_ops qfq_class_ops = {
        .delete         = qfq_delete_class,
        .get            = qfq_get_class,
        .put            = qfq_put_class,
-       .tcf_chain      = qfq_tcf_chain,
+       .tcf_block      = qfq_tcf_block,
        .bind_tcf       = qfq_bind_tcf,
        .unbind_tcf     = qfq_unbind_tcf,
        .graft          = qfq_graft_class,