On Sun, 2016-06-12 at 20:45 -0700, Cong Wang wrote: > On Sun, Jun 12, 2016 at 4:21 PM, Eric Dumazet <eric.duma...@gmail.com> wrote: > > + struct Qdisc *child; > > + > > + if (q->queues[i] != &noop_qdisc) > > + continue; > > + > > + child = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops, > > + TC_H_MAKE(sch->handle, i + 1)); > > + if (!child) > > + return -ENOMEM; > > Since this is inside a loop, shouldn't we kfree the previous child > creations when we fail?
You're right. prio_init() needs to do the cleanup, as prio_destroy() wont be called from qdisc_create() I am testing a fix with fault injection. Thanks.