aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2005-07-05 17:15:53 -0400
committerDavid S. Miller <davem@davemloft.net>2005-07-05 17:15:53 -0400
commit023e09a767a89bf1b8646307410852d93fd72f00 (patch)
tree6f14e606ae491eaf143be225513433803ed6dfc0 /net/sched
parent3d54b82fdf0ca79608f61448fb8ab92676487645 (diff)
[PKT_SCHED]: Report rate estimator configuration errors during qdisc allocation
Current behaviour is to not report an error if a rate estimator is created together with a qdisc and the configuration of the rate estimator is bogus. This leads to unexpected behaviour because the user is not notified. New behaviour is to report the error and let the whole qdisc creation operation fail so the user is able to fix his mistake. Signed-off-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched')
-rw-r--r--net/sched/sch_api.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 1ef482ba6b36..b9a069af4a02 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -454,15 +454,27 @@ qdisc_create(struct net_device *dev, u32 handle, struct rtattr **tca, int *errp)
454 sch->handle = handle; 454 sch->handle = handle;
455 455
456 if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS-1])) == 0) { 456 if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS-1])) == 0) {
457#ifdef CONFIG_NET_ESTIMATOR
458 if (tca[TCA_RATE-1]) {
459 err = gen_new_estimator(&sch->bstats, &sch->rate_est,
460 sch->stats_lock,
461 tca[TCA_RATE-1]);
462 if (err) {
463 /*
464 * Any broken qdiscs that would require
465 * a ops->reset() here? The qdisc was never
466 * in action so it shouldn't be necessary.
467 */
468 if (ops->destroy)
469 ops->destroy(sch);
470 goto err_out3;
471 }
472 }
473#endif
457 qdisc_lock_tree(dev); 474 qdisc_lock_tree(dev);
458 list_add_tail(&sch->list, &dev->qdisc_list); 475 list_add_tail(&sch->list, &dev->qdisc_list);
459 qdisc_unlock_tree(dev); 476 qdisc_unlock_tree(dev);
460 477
461#ifdef CONFIG_NET_ESTIMATOR
462 if (tca[TCA_RATE-1])
463 gen_new_estimator(&sch->bstats, &sch->rate_est,
464 sch->stats_lock, tca[TCA_RATE-1]);
465#endif
466 return sch; 478 return sch;
467 } 479 }
468err_out3: 480err_out3: