Skip to content

Commit

Permalink
net_sched: remove some unnecessary checks in classful schedulers
Browse files Browse the repository at this point in the history
The class argument to the ->graft(), ->leaf(), ->dump(), ->dump_stats() all
originate from either ->get() or ->walk() and are always valid.

Remove unnecessary checks.

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Patrick McHardy authored and David S. Miller committed Sep 6, 2009
1 parent de6d5cd commit 5b9a9cc
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 67 deletions.
38 changes: 17 additions & 21 deletions net/sched/sch_cbq.c
Original file line number Diff line number Diff line change
Expand Up @@ -1621,37 +1621,33 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
{
struct cbq_class *cl = (struct cbq_class*)arg;

if (cl) {
if (new == NULL) {
new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops,
cl->common.classid);
if (new == NULL)
return -ENOBUFS;
} else {
if (new == NULL) {
new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, cl->common.classid);
if (new == NULL)
return -ENOBUFS;
} else {
#ifdef CONFIG_NET_CLS_ACT
if (cl->police == TC_POLICE_RECLASSIFY)
new->reshape_fail = cbq_reshape_fail;
if (cl->police == TC_POLICE_RECLASSIFY)
new->reshape_fail = cbq_reshape_fail;
#endif
}
sch_tree_lock(sch);
*old = cl->q;
cl->q = new;
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
qdisc_reset(*old);
sch_tree_unlock(sch);

return 0;
}
return -ENOENT;
sch_tree_lock(sch);
*old = cl->q;
cl->q = new;
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
qdisc_reset(*old);
sch_tree_unlock(sch);

return 0;
}

static struct Qdisc *
cbq_leaf(struct Qdisc *sch, unsigned long arg)
{
struct cbq_class *cl = (struct cbq_class*)arg;

return cl ? cl->q : NULL;
return cl->q;
}

static void cbq_qlen_notify(struct Qdisc *sch, unsigned long arg)
Expand Down
4 changes: 1 addition & 3 deletions net/sched/sch_hfsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1203,8 +1203,6 @@ hfsc_graft_class(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
{
struct hfsc_class *cl = (struct hfsc_class *)arg;

if (cl == NULL)
return -ENOENT;
if (cl->level > 0)
return -EINVAL;
if (new == NULL) {
Expand All @@ -1228,7 +1226,7 @@ hfsc_class_leaf(struct Qdisc *sch, unsigned long arg)
{
struct hfsc_class *cl = (struct hfsc_class *)arg;

if (cl != NULL && cl->level == 0)
if (cl->level == 0)
return cl->qdisc;

return NULL;
Expand Down
35 changes: 17 additions & 18 deletions net/sched/sch_htb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1117,30 +1117,29 @@ static int htb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
{
struct htb_class *cl = (struct htb_class *)arg;

if (cl && !cl->level) {
if (new == NULL &&
(new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops,
cl->common.classid))
== NULL)
return -ENOBUFS;
sch_tree_lock(sch);
*old = cl->un.leaf.q;
cl->un.leaf.q = new;
if (*old != NULL) {
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
qdisc_reset(*old);
}
sch_tree_unlock(sch);
return 0;
if (cl->level)
return -EINVAL;
if (new == NULL &&
(new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops,
cl->common.classid)) == NULL)
return -ENOBUFS;

sch_tree_lock(sch);
*old = cl->un.leaf.q;
cl->un.leaf.q = new;
if (*old != NULL) {
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
qdisc_reset(*old);
}
return -ENOENT;
sch_tree_unlock(sch);
return 0;
}

static struct Qdisc *htb_leaf(struct Qdisc *sch, unsigned long arg)
{
struct htb_class *cl = (struct htb_class *)arg;
return (cl && !cl->level) ? cl->un.leaf.q : NULL;
return !cl->level ? cl->un.leaf.q : NULL;
}

static void htb_qlen_notify(struct Qdisc *sch, unsigned long arg)
Expand Down
11 changes: 1 addition & 10 deletions net/sched/sch_multiq.c
Original file line number Diff line number Diff line change
Expand Up @@ -298,9 +298,6 @@ static int multiq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
struct multiq_sched_data *q = qdisc_priv(sch);
unsigned long band = arg - 1;

if (band >= q->bands)
return -EINVAL;

if (new == NULL)
new = &noop_qdisc;

Expand All @@ -320,9 +317,6 @@ multiq_leaf(struct Qdisc *sch, unsigned long arg)
struct multiq_sched_data *q = qdisc_priv(sch);
unsigned long band = arg - 1;

if (band >= q->bands)
return NULL;

return q->queues[band];
}

Expand Down Expand Up @@ -353,11 +347,8 @@ static int multiq_dump_class(struct Qdisc *sch, unsigned long cl,
{
struct multiq_sched_data *q = qdisc_priv(sch);

if (cl - 1 > q->bands)
return -ENOENT;
tcm->tcm_handle |= TC_H_MIN(cl);
if (q->queues[cl-1])
tcm->tcm_info = q->queues[cl-1]->handle;
tcm->tcm_info = q->queues[cl-1]->handle;
return 0;
}

Expand Down
11 changes: 1 addition & 10 deletions net/sched/sch_prio.c
Original file line number Diff line number Diff line change
Expand Up @@ -262,9 +262,6 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
struct prio_sched_data *q = qdisc_priv(sch);
unsigned long band = arg - 1;

if (band >= q->bands)
return -EINVAL;

if (new == NULL)
new = &noop_qdisc;

Expand All @@ -284,9 +281,6 @@ prio_leaf(struct Qdisc *sch, unsigned long arg)
struct prio_sched_data *q = qdisc_priv(sch);
unsigned long band = arg - 1;

if (band >= q->bands)
return NULL;

return q->queues[band];
}

Expand Down Expand Up @@ -316,11 +310,8 @@ static int prio_dump_class(struct Qdisc *sch, unsigned long cl, struct sk_buff *
{
struct prio_sched_data *q = qdisc_priv(sch);

if (cl - 1 > q->bands)
return -ENOENT;
tcm->tcm_handle |= TC_H_MIN(cl);
if (q->queues[cl-1])
tcm->tcm_info = q->queues[cl-1]->handle;
tcm->tcm_info = q->queues[cl-1]->handle;
return 0;
}

Expand Down
2 changes: 0 additions & 2 deletions net/sched/sch_red.c
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,6 @@ static int red_dump_class(struct Qdisc *sch, unsigned long cl,
{
struct red_sched_data *q = qdisc_priv(sch);

if (cl != 1)
return -ENOENT;
tcm->tcm_handle |= TC_H_MIN(1);
tcm->tcm_info = q->qdisc->handle;
return 0;
Expand Down
3 changes: 0 additions & 3 deletions net/sched/sch_tbf.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,9 +368,6 @@ static int tbf_dump_class(struct Qdisc *sch, unsigned long cl,
{
struct tbf_sched_data *q = qdisc_priv(sch);

if (cl != 1) /* only one class */
return -ENOENT;

tcm->tcm_handle |= TC_H_MIN(1);
tcm->tcm_info = q->qdisc->handle;

Expand Down

0 comments on commit 5b9a9cc

Please sign in to comment.