static void qfq_destroy_class(struct Qdisc *sch, struct qfq_class *cl)
 {
-       struct qfq_sched *q = qdisc_priv(sch);
-
-       qfq_rm_from_agg(q, cl);
        gen_kill_estimator(&cl->rate_est);
        qdisc_put(cl->qdisc);
        kfree(cl);
 
        qdisc_purge_queue(cl->qdisc);
        qdisc_class_hash_remove(&q->clhash, &cl->common);
-       qfq_destroy_class(sch, cl);
+       qfq_rm_from_agg(q, cl);
 
        sch_tree_unlock(sch);
 
+       qfq_destroy_class(sch, cl);
        return 0;
 }
 
        for (i = 0; i < q->clhash.hashsize; i++) {
                hlist_for_each_entry_safe(cl, next, &q->clhash.hash[i],
                                          common.hnode) {
+                       qfq_rm_from_agg(q, cl);
                        qfq_destroy_class(sch, cl);
                }
        }