]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: sched: Add extack to Qdisc_class_ops.delete
authorMaxim Mikityanskiy <maximmi@mellanox.com>
Tue, 19 Jan 2021 12:08:12 +0000 (14:08 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 23 Jan 2021 04:41:29 +0000 (20:41 -0800)
In a following commit, sch_htb will start using extack in the delete
class operation to pass hardware errors in offload mode. This commit
prepares for that by adding the extack parameter to this callback and
converting usage of the existing qdiscs.

Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
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_qfq.c
net/sched/sch_sfb.c

index 2969190105523d1388bdef8b403afd636d64f2d2..070f01bf17eb9f878853b52c625901f19b9f9ac7 100644 (file)
@@ -210,7 +210,8 @@ struct Qdisc_class_ops {
        int                     (*change)(struct Qdisc *, u32, u32,
                                        struct nlattr **, unsigned long *,
                                        struct netlink_ext_ack *);
-       int                     (*delete)(struct Qdisc *, unsigned long);
+       int                     (*delete)(struct Qdisc *, unsigned long,
+                                         struct netlink_ext_ack *);
        void                    (*walk)(struct Qdisc *, struct qdisc_walker * arg);
 
        /* Filter manipulation */
index 6fe4e5cc807c90b046a16f014df43bfe841cbc43..e2e4353db8a70d5fe3d0f41d93b446c7b5ff628f 100644 (file)
@@ -1866,7 +1866,8 @@ static int tclass_notify(struct net *net, struct sk_buff *oskb,
 static int tclass_del_notify(struct net *net,
                             const struct Qdisc_class_ops *cops,
                             struct sk_buff *oskb, struct nlmsghdr *n,
-                            struct Qdisc *q, unsigned long cl)
+                            struct Qdisc *q, unsigned long cl,
+                            struct netlink_ext_ack *extack)
 {
        u32 portid = oskb ? NETLINK_CB(oskb).portid : 0;
        struct sk_buff *skb;
@@ -1885,7 +1886,7 @@ static int tclass_del_notify(struct net *net,
                return -EINVAL;
        }
 
-       err = cops->delete(q, cl);
+       err = cops->delete(q, cl, extack);
        if (err) {
                kfree_skb(skb);
                return err;
@@ -2088,7 +2089,7 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n,
                                goto out;
                        break;
                case RTM_DELTCLASS:
-                       err = tclass_del_notify(net, cops, skb, n, q, cl);
+                       err = tclass_del_notify(net, cops, skb, n, q, cl, extack);
                        /* Unbind the class with flilters with 0 */
                        tc_bind_tclass(q, portid, clid, 0);
                        goto out;
index 007bd2d9f1ff970bfdfce45331b892936987c956..d0c9a57398fc2619aae98c452fd643330e508332 100644 (file)
@@ -320,7 +320,8 @@ err_out:
        return error;
 }
 
-static int atm_tc_delete(struct Qdisc *sch, unsigned long arg)
+static int atm_tc_delete(struct Qdisc *sch, unsigned long arg,
+                        struct netlink_ext_ack *extack)
 {
        struct atm_qdisc_data *p = qdisc_priv(sch);
        struct atm_flow_data *flow = (struct atm_flow_data *)arg;
index 53d45e029c36d46b9e4f0d1005ef98c468fdd085..320b3d31fa97f4a9f6c06205b7aa370081e34356 100644 (file)
@@ -1675,7 +1675,8 @@ failure:
        return err;
 }
 
-static int cbq_delete(struct Qdisc *sch, unsigned long arg)
+static int cbq_delete(struct Qdisc *sch, unsigned long arg,
+                     struct netlink_ext_ack *extack)
 {
        struct cbq_sched_data *q = qdisc_priv(sch);
        struct cbq_class *cl = (struct cbq_class *)arg;
index dde564670ad8ca17128e45401b369144df9231a3..fc1e47069593679927bccdc4e966d96e89de05d3 100644 (file)
@@ -146,7 +146,8 @@ static void drr_destroy_class(struct Qdisc *sch, struct drr_class *cl)
        kfree(cl);
 }
 
-static int drr_delete_class(struct Qdisc *sch, unsigned long arg)
+static int drr_delete_class(struct Qdisc *sch, unsigned long arg,
+                           struct netlink_ext_ack *extack)
 {
        struct drr_sched *q = qdisc_priv(sch);
        struct drr_class *cl = (struct drr_class *)arg;
index 2b88710994d71e5339f82ef3fe53ecce961ea42f..cd2748e2d4a2057e327e61478618a1ca8b1bf5b7 100644 (file)
@@ -150,7 +150,8 @@ errout:
        return err;
 }
 
-static int dsmark_delete(struct Qdisc *sch, unsigned long arg)
+static int dsmark_delete(struct Qdisc *sch, unsigned long arg,
+                        struct netlink_ext_ack *extack)
 {
        struct dsmark_qdisc_data *p = qdisc_priv(sch);
 
index d1902fca98447f0073e98947ae0cc7f969728022..bf0034c66e359674322845b7b09959c047a6d248 100644 (file)
@@ -1090,7 +1090,8 @@ hfsc_destroy_class(struct Qdisc *sch, struct hfsc_class *cl)
 }
 
 static int
-hfsc_delete_class(struct Qdisc *sch, unsigned long arg)
+hfsc_delete_class(struct Qdisc *sch, unsigned long arg,
+                 struct netlink_ext_ack *extack)
 {
        struct hfsc_sched *q = qdisc_priv(sch);
        struct hfsc_class *cl = (struct hfsc_class *)arg;
index cd70dbcbd72fdddcda75d98d918f70554af60214..a8fc97b05bd870126bd1b1c3d178c4bdbacb19fc 100644 (file)
@@ -1246,7 +1246,8 @@ static void htb_destroy(struct Qdisc *sch)
        __qdisc_reset_queue(&q->direct_queue);
 }
 
-static int htb_delete(struct Qdisc *sch, unsigned long arg)
+static int htb_delete(struct Qdisc *sch, unsigned long arg,
+                     struct netlink_ext_ack *extack)
 {
        struct htb_sched *q = qdisc_priv(sch);
        struct htb_class *cl = (struct htb_class *)arg;
index 6335230a971e21233bb1758b57ae72fff41ce6fc..1db9d4a2ef5efcd6ace03fc22d4ea1c69a2847be 100644 (file)
@@ -529,7 +529,8 @@ static void qfq_destroy_class(struct Qdisc *sch, struct qfq_class *cl)
        kfree(cl);
 }
 
-static int qfq_delete_class(struct Qdisc *sch, unsigned long arg)
+static int qfq_delete_class(struct Qdisc *sch, unsigned long arg,
+                           struct netlink_ext_ack *extack)
 {
        struct qfq_sched *q = qdisc_priv(sch);
        struct qfq_class *cl = (struct qfq_class *)arg;
index da047a37a3bf3e86b3e463cfb9f79bf986720d07..dde829d4b9f8349147a14b3366e1b420df815a9c 100644 (file)
@@ -649,7 +649,8 @@ static int sfb_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
        return -ENOSYS;
 }
 
-static int sfb_delete(struct Qdisc *sch, unsigned long cl)
+static int sfb_delete(struct Qdisc *sch, unsigned long cl,
+                     struct netlink_ext_ack *extack)
 {
        return -ENOSYS;
 }