Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 023e09a7 authored by Thomas Graf's avatar Thomas Graf Committed by David S. Miller
Browse files

[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: default avatarThomas Graf <tgraf@suug.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3d54b82f
Loading
Loading
Loading
Loading
+17 −5
Original line number Original line Diff line number Diff line
@@ -454,15 +454,27 @@ qdisc_create(struct net_device *dev, u32 handle, struct rtattr **tca, int *errp)
	sch->handle = handle;
	sch->handle = handle;


	if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS-1])) == 0) {
	if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS-1])) == 0) {
#ifdef CONFIG_NET_ESTIMATOR
		if (tca[TCA_RATE-1]) {
			err = gen_new_estimator(&sch->bstats, &sch->rate_est,
						sch->stats_lock,
						tca[TCA_RATE-1]);
			if (err) {
				/*
				 * Any broken qdiscs that would require
				 * a ops->reset() here? The qdisc was never
				 * in action so it shouldn't be necessary.
				 */
				if (ops->destroy)
					ops->destroy(sch);
				goto err_out3;
			}
		}
#endif
		qdisc_lock_tree(dev);
		qdisc_lock_tree(dev);
		list_add_tail(&sch->list, &dev->qdisc_list);
		list_add_tail(&sch->list, &dev->qdisc_list);
		qdisc_unlock_tree(dev);
		qdisc_unlock_tree(dev);


#ifdef CONFIG_NET_ESTIMATOR
		if (tca[TCA_RATE-1])
			gen_new_estimator(&sch->bstats, &sch->rate_est,
				sch->stats_lock, tca[TCA_RATE-1]);
#endif
		return sch;
		return sch;
	}
	}
err_out3:
err_out3: