q->nbands = nbands;
        for (i = nstrict; i < q->nstrict; i++) {
-               INIT_LIST_HEAD(&q->classes[i].alist);
                if (q->classes[i].qdisc->q.qlen) {
                        list_add_tail(&q->classes[i].alist, &q->active);
                        q->classes[i].deficit = quanta[i];
        ets_offload_change(sch);
        for (i = q->nbands; i < oldbands; i++) {
                qdisc_put(q->classes[i].qdisc);
-               memset(&q->classes[i], 0, sizeof(q->classes[i]));
+               q->classes[i].qdisc = NULL;
+               q->classes[i].quantum = 0;
+               q->classes[i].deficit = 0;
+               memset(&q->classes[i].bstats, 0, sizeof(q->classes[i].bstats));
+               memset(&q->classes[i].qstats, 0, sizeof(q->classes[i].qstats));
        }
        return 0;
 }
                          struct netlink_ext_ack *extack)
 {
        struct ets_sched *q = qdisc_priv(sch);
-       int err;
+       int err, i;
 
        if (!opt)
                return -EINVAL;
                return err;
 
        INIT_LIST_HEAD(&q->active);
+       for (i = 0; i < TCQ_ETS_MAX_BANDS; i++)
+               INIT_LIST_HEAD(&q->classes[i].alist);
+
        return ets_qdisc_change(sch, opt, extack);
 }