|
@@ -830,21 +830,24 @@ errout:
|
|
|
|
|
|
struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue,
|
|
|
const struct Qdisc_ops *ops,
|
|
|
- unsigned int parentid)
|
|
|
+ unsigned int parentid,
|
|
|
+ struct netlink_ext_ack *extack)
|
|
|
{
|
|
|
struct Qdisc *sch;
|
|
|
|
|
|
- if (!try_module_get(ops->owner))
|
|
|
+ if (!try_module_get(ops->owner)) {
|
|
|
+ NL_SET_ERR_MSG(extack, "Failed to increase module reference counter");
|
|
|
return NULL;
|
|
|
+ }
|
|
|
|
|
|
- sch = qdisc_alloc(dev_queue, ops, NULL);
|
|
|
+ sch = qdisc_alloc(dev_queue, ops, extack);
|
|
|
if (IS_ERR(sch)) {
|
|
|
module_put(ops->owner);
|
|
|
return NULL;
|
|
|
}
|
|
|
sch->parent = parentid;
|
|
|
|
|
|
- if (!ops->init || ops->init(sch, NULL, NULL) == 0)
|
|
|
+ if (!ops->init || ops->init(sch, NULL, extack) == 0)
|
|
|
return sch;
|
|
|
|
|
|
qdisc_destroy(sch);
|
|
@@ -956,7 +959,7 @@ static void attach_one_default_qdisc(struct net_device *dev,
|
|
|
if (dev->priv_flags & IFF_NO_QUEUE)
|
|
|
ops = &noqueue_qdisc_ops;
|
|
|
|
|
|
- qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT);
|
|
|
+ qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT, NULL);
|
|
|
if (!qdisc) {
|
|
|
netdev_info(dev, "activation failed\n");
|
|
|
return;
|
|
@@ -979,7 +982,7 @@ static void attach_default_qdiscs(struct net_device *dev)
|
|
|
dev->qdisc = txq->qdisc_sleeping;
|
|
|
qdisc_refcount_inc(dev->qdisc);
|
|
|
} else {
|
|
|
- qdisc = qdisc_create_dflt(txq, &mq_qdisc_ops, TC_H_ROOT);
|
|
|
+ qdisc = qdisc_create_dflt(txq, &mq_qdisc_ops, TC_H_ROOT, NULL);
|
|
|
if (qdisc) {
|
|
|
dev->qdisc = qdisc;
|
|
|
qdisc->ops->attach(qdisc);
|