net_sched: fix error path in red_init()
[linux-2.6-microblaze.git] / net / sched / sch_red.c
index deac82f..e89fab6 100644 (file)
@@ -353,23 +353,11 @@ static int red_init(struct Qdisc *sch, struct nlattr *opt,
                              FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP,
                              tb[TCA_RED_EARLY_DROP_BLOCK], extack);
        if (err)
-               goto err_early_drop_init;
-
-       err = tcf_qevent_init(&q->qe_mark, sch,
-                             FLOW_BLOCK_BINDER_TYPE_RED_MARK,
-                             tb[TCA_RED_MARK_BLOCK], extack);
-       if (err)
-               goto err_mark_init;
-
-       return 0;
+               return err;
 
-err_mark_init:
-       tcf_qevent_destroy(&q->qe_early_drop, sch);
-err_early_drop_init:
-       del_timer_sync(&q->adapt_timer);
-       red_offload(sch, false);
-       qdisc_put(q->qdisc);
-       return err;
+       return tcf_qevent_init(&q->qe_mark, sch,
+                              FLOW_BLOCK_BINDER_TYPE_RED_MARK,
+                              tb[TCA_RED_MARK_BLOCK], extack);
 }
 
 static int red_change(struct Qdisc *sch, struct nlattr *opt,