aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/sch_prio.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sched/sch_prio.c')
-rw-r--r--net/sched/sch_prio.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c
index 2243aaa8d851..a4f932df86e9 100644
--- a/net/sched/sch_prio.c
+++ b/net/sched/sch_prio.c
@@ -224,15 +224,15 @@ prio_destroy(struct Qdisc* sch)
224 qdisc_destroy(q->queues[prio]); 224 qdisc_destroy(q->queues[prio]);
225} 225}
226 226
227static int prio_tune(struct Qdisc *sch, struct rtattr *opt) 227static int prio_tune(struct Qdisc *sch, struct nlattr *opt)
228{ 228{
229 struct prio_sched_data *q = qdisc_priv(sch); 229 struct prio_sched_data *q = qdisc_priv(sch);
230 struct tc_prio_qopt *qopt; 230 struct tc_prio_qopt *qopt;
231 struct rtattr *tb[TCA_PRIO_MAX]; 231 struct nlattr *tb[TCA_PRIO_MAX + 1];
232 int i; 232 int i;
233 233
234 if (rtattr_parse_nested_compat(tb, TCA_PRIO_MAX, opt, qopt, 234 if (nla_parse_nested_compat(tb, TCA_PRIO_MAX, opt, NULL, qopt,
235 sizeof(*qopt))) 235 sizeof(*qopt)))
236 return -EINVAL; 236 return -EINVAL;
237 q->bands = qopt->bands; 237 q->bands = qopt->bands;
238 /* If we're multiqueue, make sure the number of incoming bands 238 /* If we're multiqueue, make sure the number of incoming bands
@@ -242,7 +242,7 @@ static int prio_tune(struct Qdisc *sch, struct rtattr *opt)
242 * only one that is enabled for multiqueue, since it's the only one 242 * only one that is enabled for multiqueue, since it's the only one
243 * that interacts with the underlying device. 243 * that interacts with the underlying device.
244 */ 244 */
245 q->mq = RTA_GET_FLAG(tb[TCA_PRIO_MQ - 1]); 245 q->mq = nla_get_flag(tb[TCA_PRIO_MQ]);
246 if (q->mq) { 246 if (q->mq) {
247 if (sch->parent != TC_H_ROOT) 247 if (sch->parent != TC_H_ROOT)
248 return -EINVAL; 248 return -EINVAL;
@@ -296,7 +296,7 @@ static int prio_tune(struct Qdisc *sch, struct rtattr *opt)
296 return 0; 296 return 0;
297} 297}
298 298
299static int prio_init(struct Qdisc *sch, struct rtattr *opt) 299static int prio_init(struct Qdisc *sch, struct nlattr *opt)
300{ 300{
301 struct prio_sched_data *q = qdisc_priv(sch); 301 struct prio_sched_data *q = qdisc_priv(sch);
302 int i; 302 int i;
@@ -319,20 +319,24 @@ static int prio_dump(struct Qdisc *sch, struct sk_buff *skb)
319{ 319{
320 struct prio_sched_data *q = qdisc_priv(sch); 320 struct prio_sched_data *q = qdisc_priv(sch);
321 unsigned char *b = skb_tail_pointer(skb); 321 unsigned char *b = skb_tail_pointer(skb);
322 struct rtattr *nest; 322 struct nlattr *nest;
323 struct tc_prio_qopt opt; 323 struct tc_prio_qopt opt;
324 324
325 opt.bands = q->bands; 325 opt.bands = q->bands;
326 memcpy(&opt.priomap, q->prio2band, TC_PRIO_MAX+1); 326 memcpy(&opt.priomap, q->prio2band, TC_PRIO_MAX+1);
327 327
328 nest = RTA_NEST_COMPAT(skb, TCA_OPTIONS, sizeof(opt), &opt); 328 nest = nla_nest_compat_start(skb, TCA_OPTIONS, sizeof(opt), &opt);
329 if (q->mq) 329 if (nest == NULL)
330 RTA_PUT_FLAG(skb, TCA_PRIO_MQ); 330 goto nla_put_failure;
331 RTA_NEST_COMPAT_END(skb, nest); 331 if (q->mq) {
332 if (nla_put_flag(skb, TCA_PRIO_MQ) < 0)
333 goto nla_put_failure;
334 }
335 nla_nest_compat_end(skb, nest);
332 336
333 return skb->len; 337 return skb->len;
334 338
335rtattr_failure: 339nla_put_failure:
336 nlmsg_trim(skb, b); 340 nlmsg_trim(skb, b);
337 return -1; 341 return -1;
338} 342}
@@ -392,7 +396,7 @@ static void prio_put(struct Qdisc *q, unsigned long cl)
392 return; 396 return;
393} 397}
394 398
395static int prio_change(struct Qdisc *sch, u32 handle, u32 parent, struct rtattr **tca, unsigned long *arg) 399static int prio_change(struct Qdisc *sch, u32 handle, u32 parent, struct nlattr **tca, unsigned long *arg)
396{ 400{
397 unsigned long cl = *arg; 401 unsigned long cl = *arg;
398 struct prio_sched_data *q = qdisc_priv(sch); 402 struct prio_sched_data *q = qdisc_priv(sch);