net: sched: sch: add extack for graft callback
authorAlexander Aring <aring@mojatatu.com>
Wed, 20 Dec 2017 17:35:17 +0000 (12:35 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 21 Dec 2017 17:32:50 +0000 (12:32 -0500)
This patch adds extack support for graft 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>
17 files changed:
include/net/sch_generic.h
net/sched/sch_api.c
net/sched/sch_atm.c
net/sched/sch_cbq.c
net/sched/sch_drr.c
net/sched/sch_dsmark.c
net/sched/sch_hfsc.c
net/sched/sch_htb.c
net/sched/sch_mq.c
net/sched/sch_mqprio.c
net/sched/sch_multiq.c
net/sched/sch_netem.c
net/sched/sch_prio.c
net/sched/sch_qfq.c
net/sched/sch_red.c
net/sched/sch_sfb.c
net/sched/sch_tbf.c

index f65dd2837142210c56775e00be3503830c54059b..3baadac9e7a5328dd1480c6f9a515fbdece31bf8 100644 (file)
@@ -151,7 +151,8 @@ struct Qdisc_class_ops {
        /* Child qdisc manipulation */
        struct netdev_queue *   (*select_queue)(struct Qdisc *, struct tcmsg *);
        int                     (*graft)(struct Qdisc *, unsigned long cl,
-                                       struct Qdisc *, struct Qdisc **);
+                                       struct Qdisc *, struct Qdisc **,
+                                       struct netlink_ext_ack *extack);
        struct Qdisc *          (*leaf)(struct Qdisc *, unsigned long cl);
        void                    (*qlen_notify)(struct Qdisc *, unsigned long);
 
index 8c8c15b4da3bd8f516f77caf071505986fde805e..4b950d72d13be3308f7a39d0cb544a97b721ea28 100644 (file)
@@ -977,7 +977,8 @@ skip:
                        unsigned long cl = cops->find(parent, classid);
 
                        if (cl) {
-                               err = cops->graft(parent, cl, new, &old);
+                               err = cops->graft(parent, cl, new, &old,
+                                                 extack);
                        } else {
                                NL_SET_ERR_MSG(extack, "Specified class not found");
                                err = -ENOENT;
index b606a75af3333e91851c206924056977ae332dd5..8972ab72cda55dfa9913dfd21f3834de8cdae0e5 100644 (file)
@@ -82,7 +82,8 @@ static inline struct atm_flow_data *lookup_flow(struct Qdisc *sch, u32 classid)
 }
 
 static int atm_tc_graft(struct Qdisc *sch, unsigned long arg,
-                       struct Qdisc *new, struct Qdisc **old)
+                       struct Qdisc *new, struct Qdisc **old,
+                       struct netlink_ext_ack *extack)
 {
        struct atm_qdisc_data *p = qdisc_priv(sch);
        struct atm_flow_data *flow = (struct atm_flow_data *)arg;
index d46048a439a65d85b912c93ad3d17e47bae2feef..bb7e4ccd7caff58488bf545a175124fa126b0d09 100644 (file)
@@ -1371,7 +1371,7 @@ cbq_dump_class_stats(struct Qdisc *sch, unsigned long arg,
 }
 
 static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-                    struct Qdisc **old)
+                    struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct cbq_class *cl = (struct cbq_class *)arg;
 
index 44a2870f6f104d23b974c07eaf4f5ce186310d96..30e9cba54ddb06c9bed791a140b937cb0e45594b 100644 (file)
@@ -203,7 +203,8 @@ static void drr_unbind_tcf(struct Qdisc *sch, unsigned long arg)
 }
 
 static int drr_graft_class(struct Qdisc *sch, unsigned long arg,
-                          struct Qdisc *new, struct Qdisc **old)
+                          struct Qdisc *new, struct Qdisc **old,
+                          struct netlink_ext_ack *extack)
 {
        struct drr_class *cl = (struct drr_class *)arg;
 
index 5dc5d5216fbb51f1d6c448878f2f18a971ee0759..92a36aa4c71340335b66ba607c2e098a0f44cd51 100644 (file)
@@ -61,7 +61,8 @@ static inline int dsmark_valid_index(struct dsmark_qdisc_data *p, u16 index)
 /* ------------------------- Class/flow operations ------------------------- */
 
 static int dsmark_graft(struct Qdisc *sch, unsigned long arg,
-                       struct Qdisc *new, struct Qdisc **old)
+                       struct Qdisc *new, struct Qdisc **old,
+                       struct netlink_ext_ack *extack)
 {
        struct dsmark_qdisc_data *p = qdisc_priv(sch);
 
index 961668d657a087bdf79aef5b7e0be07da40a65ef..7f6a06ac4b9f4a1e55f35b91df824642ae08f92f 100644 (file)
@@ -1177,7 +1177,7 @@ hfsc_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)
 
 static int
 hfsc_graft_class(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-                struct Qdisc **old)
+                struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct hfsc_class *cl = (struct hfsc_class *)arg;
 
index 79cf24468a3813ae9dcca168344c51c0b19d3736..65762d57a70d684f1329489a4b8f9e34380fc85f 100644 (file)
@@ -1172,7 +1172,7 @@ htb_dump_class_stats(struct Qdisc *sch, unsigned long arg, struct gnet_dump *d)
 }
 
 static int htb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-                    struct Qdisc **old)
+                    struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct htb_class *cl = (struct htb_class *)arg;
 
index b91f7d8cb184794ee3a6f9c592df30ddb4189386..50292e470432b01fbf5b767c2ee193450c259f58 100644 (file)
@@ -155,7 +155,7 @@ static struct netdev_queue *mq_select_queue(struct Qdisc *sch,
 }
 
 static int mq_graft(struct Qdisc *sch, unsigned long cl, struct Qdisc *new,
-                   struct Qdisc **old)
+                   struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct netdev_queue *dev_queue = mq_queue_get(sch, cl);
        struct net_device *dev = qdisc_dev(sch);
index 0379fc4ee7bb90df88b4e5478bbce51661937f8c..29071cf329f33fcddd43a4d5509cedc77a1e7e01 100644 (file)
@@ -320,7 +320,7 @@ static struct netdev_queue *mqprio_queue_get(struct Qdisc *sch,
 }
 
 static int mqprio_graft(struct Qdisc *sch, unsigned long cl, struct Qdisc *new,
-                   struct Qdisc **old)
+                       struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct net_device *dev = qdisc_dev(sch);
        struct netdev_queue *dev_queue = mqprio_queue_get(sch, cl);
index 4bcbd3636606797e9b23d66bdcdbd811ded78835..177d86de4b3280a83be090c9a848906d317d870f 100644 (file)
@@ -283,7 +283,7 @@ nla_put_failure:
 }
 
 static int multiq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-                     struct Qdisc **old)
+                       struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct multiq_sched_data *q = qdisc_priv(sch);
        unsigned long band = arg - 1;
index f45040b555310391f138692507558e2bca1d892f..7bbc13b8ca47f46ea1ae05e1568a72792a9cea2a 100644 (file)
@@ -1159,7 +1159,7 @@ static int netem_dump_class(struct Qdisc *sch, unsigned long cl,
 }
 
 static int netem_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-                    struct Qdisc **old)
+                    struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct netem_sched_data *q = qdisc_priv(sch);
 
index 077af47307495a98fc45aa3db27febdd1c2242a6..8fbd65661d771508366c8880aac88ecf99e56439 100644 (file)
@@ -242,7 +242,7 @@ nla_put_failure:
 }
 
 static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-                     struct Qdisc **old)
+                     struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct prio_sched_data *q = qdisc_priv(sch);
        unsigned long band = arg - 1;
index e77e7131e620a48d087448728c21f375c5a71f31..7ec893f770d2c70706395c81dc49b45d354541aa 100644 (file)
@@ -595,7 +595,8 @@ static void qfq_unbind_tcf(struct Qdisc *sch, unsigned long arg)
 }
 
 static int qfq_graft_class(struct Qdisc *sch, unsigned long arg,
-                          struct Qdisc *new, struct Qdisc **old)
+                          struct Qdisc *new, struct Qdisc **old,
+                          struct netlink_ext_ack *extack)
 {
        struct qfq_class *cl = (struct qfq_class *)arg;
 
index 6b85f8334b743bb45ccd394a08a5c136e2ad8b16..ea7d400b9eb201351316c20e5e7c3ee93c5128d2 100644 (file)
@@ -382,7 +382,7 @@ static int red_dump_class(struct Qdisc *sch, unsigned long cl,
 }
 
 static int red_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-                    struct Qdisc **old)
+                    struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct red_sched_data *q = qdisc_priv(sch);
 
index 9e01b80edfe7738265519ed029bf8da05a11959f..1a33d6c3ac424d3026ce222e7e954f768df10e46 100644 (file)
@@ -617,7 +617,7 @@ static int sfb_dump_class(struct Qdisc *sch, unsigned long cl,
 }
 
 static int sfb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-                    struct Qdisc **old)
+                    struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct sfb_sched_data *q = qdisc_priv(sch);
 
index 273228eb5ce085d51924bf105170838318de4c56..db6bd23530d45a4f147d4285c9cdef3da2657b67 100644 (file)
@@ -496,7 +496,7 @@ static int tbf_dump_class(struct Qdisc *sch, unsigned long cl,
 }
 
 static int tbf_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-                    struct Qdisc **old)
+                    struct Qdisc **old, struct netlink_ext_ack *extack)
 {
        struct tbf_sched_data *q = qdisc_priv(sch);