mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
net_sched: remove some unnecessary checks in classful schedulers
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>
This commit is contained in:
parent
de6d5cdf88
commit
5b9a9ccfad
7 changed files with 37 additions and 67 deletions
|
@ -1621,29 +1621,25 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||||
{
|
{
|
||||||
struct cbq_class *cl = (struct cbq_class*)arg;
|
struct cbq_class *cl = (struct cbq_class*)arg;
|
||||||
|
|
||||||
if (cl) {
|
if (new == NULL) {
|
||||||
if (new == NULL) {
|
new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
|
||||||
new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
|
&pfifo_qdisc_ops, cl->common.classid);
|
||||||
&pfifo_qdisc_ops,
|
if (new == NULL)
|
||||||
cl->common.classid);
|
return -ENOBUFS;
|
||||||
if (new == NULL)
|
} else {
|
||||||
return -ENOBUFS;
|
|
||||||
} else {
|
|
||||||
#ifdef CONFIG_NET_CLS_ACT
|
#ifdef CONFIG_NET_CLS_ACT
|
||||||
if (cl->police == TC_POLICE_RECLASSIFY)
|
if (cl->police == TC_POLICE_RECLASSIFY)
|
||||||
new->reshape_fail = cbq_reshape_fail;
|
new->reshape_fail = cbq_reshape_fail;
|
||||||
#endif
|
#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 *
|
static struct Qdisc *
|
||||||
|
@ -1651,7 +1647,7 @@ cbq_leaf(struct Qdisc *sch, unsigned long arg)
|
||||||
{
|
{
|
||||||
struct cbq_class *cl = (struct cbq_class*)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)
|
static void cbq_qlen_notify(struct Qdisc *sch, unsigned long arg)
|
||||||
|
|
|
@ -1203,8 +1203,6 @@ hfsc_graft_class(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||||
{
|
{
|
||||||
struct hfsc_class *cl = (struct hfsc_class *)arg;
|
struct hfsc_class *cl = (struct hfsc_class *)arg;
|
||||||
|
|
||||||
if (cl == NULL)
|
|
||||||
return -ENOENT;
|
|
||||||
if (cl->level > 0)
|
if (cl->level > 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (new == NULL) {
|
if (new == NULL) {
|
||||||
|
@ -1228,7 +1226,7 @@ hfsc_class_leaf(struct Qdisc *sch, unsigned long arg)
|
||||||
{
|
{
|
||||||
struct hfsc_class *cl = (struct hfsc_class *)arg;
|
struct hfsc_class *cl = (struct hfsc_class *)arg;
|
||||||
|
|
||||||
if (cl != NULL && cl->level == 0)
|
if (cl->level == 0)
|
||||||
return cl->qdisc;
|
return cl->qdisc;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -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;
|
struct htb_class *cl = (struct htb_class *)arg;
|
||||||
|
|
||||||
if (cl && !cl->level) {
|
if (cl->level)
|
||||||
if (new == NULL &&
|
return -EINVAL;
|
||||||
(new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
|
if (new == NULL &&
|
||||||
&pfifo_qdisc_ops,
|
(new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
|
||||||
cl->common.classid))
|
&pfifo_qdisc_ops,
|
||||||
== NULL)
|
cl->common.classid)) == NULL)
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
sch_tree_lock(sch);
|
|
||||||
*old = cl->un.leaf.q;
|
sch_tree_lock(sch);
|
||||||
cl->un.leaf.q = new;
|
*old = cl->un.leaf.q;
|
||||||
if (*old != NULL) {
|
cl->un.leaf.q = new;
|
||||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
if (*old != NULL) {
|
||||||
qdisc_reset(*old);
|
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||||
}
|
qdisc_reset(*old);
|
||||||
sch_tree_unlock(sch);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return -ENOENT;
|
sch_tree_unlock(sch);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct Qdisc *htb_leaf(struct Qdisc *sch, unsigned long arg)
|
static struct Qdisc *htb_leaf(struct Qdisc *sch, unsigned long arg)
|
||||||
{
|
{
|
||||||
struct htb_class *cl = (struct htb_class *)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)
|
static void htb_qlen_notify(struct Qdisc *sch, unsigned long arg)
|
||||||
|
|
|
@ -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);
|
struct multiq_sched_data *q = qdisc_priv(sch);
|
||||||
unsigned long band = arg - 1;
|
unsigned long band = arg - 1;
|
||||||
|
|
||||||
if (band >= q->bands)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (new == NULL)
|
if (new == NULL)
|
||||||
new = &noop_qdisc;
|
new = &noop_qdisc;
|
||||||
|
|
||||||
|
@ -320,9 +317,6 @@ multiq_leaf(struct Qdisc *sch, unsigned long arg)
|
||||||
struct multiq_sched_data *q = qdisc_priv(sch);
|
struct multiq_sched_data *q = qdisc_priv(sch);
|
||||||
unsigned long band = arg - 1;
|
unsigned long band = arg - 1;
|
||||||
|
|
||||||
if (band >= q->bands)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return q->queues[band];
|
return q->queues[band];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -353,11 +347,8 @@ static int multiq_dump_class(struct Qdisc *sch, unsigned long cl,
|
||||||
{
|
{
|
||||||
struct multiq_sched_data *q = qdisc_priv(sch);
|
struct multiq_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
if (cl - 1 > q->bands)
|
|
||||||
return -ENOENT;
|
|
||||||
tcm->tcm_handle |= TC_H_MIN(cl);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
struct prio_sched_data *q = qdisc_priv(sch);
|
||||||
unsigned long band = arg - 1;
|
unsigned long band = arg - 1;
|
||||||
|
|
||||||
if (band >= q->bands)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (new == NULL)
|
if (new == NULL)
|
||||||
new = &noop_qdisc;
|
new = &noop_qdisc;
|
||||||
|
|
||||||
|
@ -284,9 +281,6 @@ prio_leaf(struct Qdisc *sch, unsigned long arg)
|
||||||
struct prio_sched_data *q = qdisc_priv(sch);
|
struct prio_sched_data *q = qdisc_priv(sch);
|
||||||
unsigned long band = arg - 1;
|
unsigned long band = arg - 1;
|
||||||
|
|
||||||
if (band >= q->bands)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return q->queues[band];
|
return q->queues[band];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
struct prio_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
if (cl - 1 > q->bands)
|
|
||||||
return -ENOENT;
|
|
||||||
tcm->tcm_handle |= TC_H_MIN(cl);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -268,8 +268,6 @@ static int red_dump_class(struct Qdisc *sch, unsigned long cl,
|
||||||
{
|
{
|
||||||
struct red_sched_data *q = qdisc_priv(sch);
|
struct red_sched_data *q = qdisc_priv(sch);
|
||||||
|
|
||||||
if (cl != 1)
|
|
||||||
return -ENOENT;
|
|
||||||
tcm->tcm_handle |= TC_H_MIN(1);
|
tcm->tcm_handle |= TC_H_MIN(1);
|
||||||
tcm->tcm_info = q->qdisc->handle;
|
tcm->tcm_info = q->qdisc->handle;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -368,9 +368,6 @@ static int tbf_dump_class(struct Qdisc *sch, unsigned long cl,
|
||||||
{
|
{
|
||||||
struct tbf_sched_data *q = qdisc_priv(sch);
|
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_handle |= TC_H_MIN(1);
|
||||||
tcm->tcm_info = q->qdisc->handle;
|
tcm->tcm_info = q->qdisc->handle;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue