diff options
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/sch_tbf.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index e9e473457361..d8e03c74ca76 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c | |||
@@ -341,13 +341,14 @@ static int tbf_change(struct Qdisc* sch, struct rtattr *opt) | |||
341 | if (max_size < 0) | 341 | if (max_size < 0) |
342 | goto done; | 342 | goto done; |
343 | 343 | ||
344 | if (q->qdisc == &noop_qdisc) { | 344 | if (qopt->limit > 0) { |
345 | if ((child = tbf_create_dflt_qdisc(sch->dev, qopt->limit)) == NULL) | 345 | if ((child = tbf_create_dflt_qdisc(sch->dev, qopt->limit)) == NULL) |
346 | goto done; | 346 | goto done; |
347 | } | 347 | } |
348 | 348 | ||
349 | sch_tree_lock(sch); | 349 | sch_tree_lock(sch); |
350 | if (child) q->qdisc = child; | 350 | if (child) |
351 | qdisc_destroy(xchg(&q->qdisc, child)); | ||
351 | q->limit = qopt->limit; | 352 | q->limit = qopt->limit; |
352 | q->mtu = qopt->mtu; | 353 | q->mtu = qopt->mtu; |
353 | q->max_size = max_size; | 354 | q->max_size = max_size; |