hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/net/sched/sch_ingress.c
....@@ -1,9 +1,5 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /* net/sched/sch_ingress.c - Ingress and clsact qdisc
2
- *
3
- * This program is free software; you can redistribute it and/or
4
- * modify it under the terms of the GNU General Public License
5
- * as published by the Free Software Foundation; either version
6
- * 2 of the License, or (at your option) any later version.
73 *
84 * Authors: Jamal Hadi Salim 1999
95 */
....@@ -82,16 +78,23 @@
8278 {
8379 struct ingress_sched_data *q = qdisc_priv(sch);
8480 struct net_device *dev = qdisc_dev(sch);
81
+ int err;
8582
8683 net_inc_ingress_queue();
8784
8885 mini_qdisc_pair_init(&q->miniqp, sch, &dev->miniq_ingress);
8986
90
- q->block_info.binder_type = TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS;
87
+ q->block_info.binder_type = FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS;
9188 q->block_info.chain_head_change = clsact_chain_head_change;
9289 q->block_info.chain_head_change_priv = &q->miniqp;
9390
94
- return tcf_block_get_ext(&q->block, sch, &q->block_info, extack);
91
+ err = tcf_block_get_ext(&q->block, sch, &q->block_info, extack);
92
+ if (err)
93
+ return err;
94
+
95
+ mini_qdisc_pair_block_init(&q->miniqp, q->block);
96
+
97
+ return 0;
9598 }
9699
97100 static void ingress_destroy(struct Qdisc *sch)
....@@ -106,7 +109,7 @@
106109 {
107110 struct nlattr *nest;
108111
109
- nest = nla_nest_start(skb, TCA_OPTIONS);
112
+ nest = nla_nest_start_noflag(skb, TCA_OPTIONS);
110113 if (nest == NULL)
111114 goto nla_put_failure;
112115
....@@ -118,6 +121,7 @@
118121 }
119122
120123 static const struct Qdisc_class_ops ingress_class_ops = {
124
+ .flags = QDISC_CLASS_OPS_DOIT_UNLOCKED,
121125 .leaf = ingress_leaf,
122126 .find = ingress_find,
123127 .walk = ingress_walk,
....@@ -220,7 +224,7 @@
220224
221225 mini_qdisc_pair_init(&q->miniqp_ingress, sch, &dev->miniq_ingress);
222226
223
- q->ingress_block_info.binder_type = TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS;
227
+ q->ingress_block_info.binder_type = FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS;
224228 q->ingress_block_info.chain_head_change = clsact_chain_head_change;
225229 q->ingress_block_info.chain_head_change_priv = &q->miniqp_ingress;
226230
....@@ -229,9 +233,11 @@
229233 if (err)
230234 return err;
231235
236
+ mini_qdisc_pair_block_init(&q->miniqp_ingress, q->ingress_block);
237
+
232238 mini_qdisc_pair_init(&q->miniqp_egress, sch, &dev->miniq_egress);
233239
234
- q->egress_block_info.binder_type = TCF_BLOCK_BINDER_TYPE_CLSACT_EGRESS;
240
+ q->egress_block_info.binder_type = FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS;
235241 q->egress_block_info.chain_head_change = clsact_chain_head_change;
236242 q->egress_block_info.chain_head_change_priv = &q->miniqp_egress;
237243
....@@ -250,6 +256,7 @@
250256 }
251257
252258 static const struct Qdisc_class_ops clsact_class_ops = {
259
+ .flags = QDISC_CLASS_OPS_DOIT_UNLOCKED,
253260 .leaf = ingress_leaf,
254261 .find = clsact_find,
255262 .walk = ingress_walk,