net: sched: sch: add extack for block callback
This patch adds extack support for block callback to prepare per-qdisc specific changes for extack. Cc: David Ahern <dsahern@gmail.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: Alexander Aring <aring@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
793d81d6a1
commit
cbaacc4e8a
@@ -165,7 +165,8 @@ struct Qdisc_class_ops {
|
|||||||
|
|
||||||
/* Filter manipulation */
|
/* Filter manipulation */
|
||||||
struct tcf_block * (*tcf_block)(struct Qdisc *sch,
|
struct tcf_block * (*tcf_block)(struct Qdisc *sch,
|
||||||
unsigned long arg);
|
unsigned long arg,
|
||||||
|
struct netlink_ext_ack *extack);
|
||||||
unsigned long (*bind_tcf)(struct Qdisc *, unsigned long,
|
unsigned long (*bind_tcf)(struct Qdisc *, unsigned long,
|
||||||
u32 classid);
|
u32 classid);
|
||||||
void (*unbind_tcf)(struct Qdisc *, unsigned long);
|
void (*unbind_tcf)(struct Qdisc *, unsigned long);
|
||||||
|
|||||||
@@ -793,7 +793,7 @@ replay:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* And the last stroke */
|
/* And the last stroke */
|
||||||
block = cops->tcf_block(q, cl);
|
block = cops->tcf_block(q, cl, extack);
|
||||||
if (!block) {
|
if (!block) {
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
goto errout;
|
goto errout;
|
||||||
@@ -1040,7 +1040,7 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
|
|||||||
if (cl == 0)
|
if (cl == 0)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
block = cops->tcf_block(q, cl);
|
block = cops->tcf_block(q, cl, NULL);
|
||||||
if (!block)
|
if (!block)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
|||||||
@@ -1760,7 +1760,7 @@ static void tc_bind_tclass(struct Qdisc *q, u32 portid, u32 clid,
|
|||||||
cl = cops->find(q, portid);
|
cl = cops->find(q, portid);
|
||||||
if (!cl)
|
if (!cl)
|
||||||
return;
|
return;
|
||||||
block = cops->tcf_block(q, cl);
|
block = cops->tcf_block(q, cl, NULL);
|
||||||
if (!block)
|
if (!block)
|
||||||
return;
|
return;
|
||||||
list_for_each_entry(chain, &block->chain_list, list) {
|
list_for_each_entry(chain, &block->chain_list, list) {
|
||||||
|
|||||||
@@ -357,7 +357,8 @@ static void atm_tc_walk(struct Qdisc *sch, struct qdisc_walker *walker)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *atm_tc_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *atm_tc_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct atm_qdisc_data *p = qdisc_priv(sch);
|
struct atm_qdisc_data *p = qdisc_priv(sch);
|
||||||
struct atm_flow_data *flow = (struct atm_flow_data *)cl;
|
struct atm_flow_data *flow = (struct atm_flow_data *)cl;
|
||||||
|
|||||||
@@ -1679,7 +1679,8 @@ static int cbq_delete(struct Qdisc *sch, unsigned long arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *cbq_tcf_block(struct Qdisc *sch, unsigned long arg)
|
static struct tcf_block *cbq_tcf_block(struct Qdisc *sch, unsigned long arg,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct cbq_sched_data *q = qdisc_priv(sch);
|
struct cbq_sched_data *q = qdisc_priv(sch);
|
||||||
struct cbq_class *cl = (struct cbq_class *)arg;
|
struct cbq_class *cl = (struct cbq_class *)arg;
|
||||||
|
|||||||
@@ -173,7 +173,8 @@ static unsigned long drr_search_class(struct Qdisc *sch, u32 classid)
|
|||||||
return (unsigned long)drr_find_class(sch, classid);
|
return (unsigned long)drr_find_class(sch, classid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *drr_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *drr_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct drr_sched *q = qdisc_priv(sch);
|
struct drr_sched *q = qdisc_priv(sch);
|
||||||
|
|
||||||
|
|||||||
@@ -185,7 +185,8 @@ ignore:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *dsmark_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *dsmark_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct dsmark_qdisc_data *p = qdisc_priv(sch);
|
struct dsmark_qdisc_data *p = qdisc_priv(sch);
|
||||||
|
|
||||||
|
|||||||
@@ -597,7 +597,8 @@ static void fq_codel_unbind(struct Qdisc *q, unsigned long cl)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *fq_codel_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *fq_codel_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct fq_codel_sched_data *q = qdisc_priv(sch);
|
struct fq_codel_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
|
|||||||
@@ -1247,7 +1247,8 @@ hfsc_unbind_tcf(struct Qdisc *sch, unsigned long arg)
|
|||||||
cl->filter_cnt--;
|
cl->filter_cnt--;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *hfsc_tcf_block(struct Qdisc *sch, unsigned long arg)
|
static struct tcf_block *hfsc_tcf_block(struct Qdisc *sch, unsigned long arg,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct hfsc_sched *q = qdisc_priv(sch);
|
struct hfsc_sched *q = qdisc_priv(sch);
|
||||||
struct hfsc_class *cl = (struct hfsc_class *)arg;
|
struct hfsc_class *cl = (struct hfsc_class *)arg;
|
||||||
|
|||||||
@@ -1525,7 +1525,8 @@ failure:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *htb_tcf_block(struct Qdisc *sch, unsigned long arg)
|
static struct tcf_block *htb_tcf_block(struct Qdisc *sch, unsigned long arg,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct htb_sched *q = qdisc_priv(sch);
|
struct htb_sched *q = qdisc_priv(sch);
|
||||||
struct htb_class *cl = (struct htb_class *)arg;
|
struct htb_class *cl = (struct htb_class *)arg;
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ static void ingress_walk(struct Qdisc *sch, struct qdisc_walker *walker)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *ingress_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *ingress_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct ingress_sched_data *q = qdisc_priv(sch);
|
struct ingress_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
@@ -154,7 +155,8 @@ static unsigned long clsact_bind_filter(struct Qdisc *sch,
|
|||||||
return clsact_find(sch, classid);
|
return clsact_find(sch, classid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *clsact_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *clsact_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct clsact_sched_data *q = qdisc_priv(sch);
|
struct clsact_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
|
|||||||
@@ -371,7 +371,8 @@ static void multiq_walk(struct Qdisc *sch, struct qdisc_walker *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *multiq_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *multiq_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct multiq_sched_data *q = qdisc_priv(sch);
|
struct multiq_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
|
|||||||
@@ -329,7 +329,8 @@ static void prio_walk(struct Qdisc *sch, struct qdisc_walker *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *prio_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *prio_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct prio_sched_data *q = qdisc_priv(sch);
|
struct prio_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
|
|||||||
@@ -565,7 +565,8 @@ static unsigned long qfq_search_class(struct Qdisc *sch, u32 classid)
|
|||||||
return (unsigned long)qfq_find_class(sch, classid);
|
return (unsigned long)qfq_find_class(sch, classid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *qfq_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *qfq_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct qfq_sched *q = qdisc_priv(sch);
|
struct qfq_sched *q = qdisc_priv(sch);
|
||||||
|
|
||||||
|
|||||||
@@ -668,7 +668,8 @@ static void sfb_walk(struct Qdisc *sch, struct qdisc_walker *walker)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *sfb_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *sfb_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct sfb_sched_data *q = qdisc_priv(sch);
|
struct sfb_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
|
|||||||
@@ -837,7 +837,8 @@ static void sfq_unbind(struct Qdisc *q, unsigned long cl)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcf_block *sfq_tcf_block(struct Qdisc *sch, unsigned long cl)
|
static struct tcf_block *sfq_tcf_block(struct Qdisc *sch, unsigned long cl,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct sfq_sched_data *q = qdisc_priv(sch);
|
struct sfq_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user