mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
sch_netem: Remove classful functionality
Patrick McHardy noticed that: "a lot of the functionality of netem requires the inner tfifo anyways and rate-limiting is usually done on top of netem. So I would suggest so either hard-wire the tfifo qdisc or at least make the assumption that inner qdiscs are work-conserving.", and later: "- a lot of other qdiscs still don't work as inner qdiscs of netem [...]". So, according to his suggestion, this patch removes classful options of netem. The main reason of this change is to remove ops->requeue() method, which is currently used only by netem. Signed-off-by: Jarek Poplawski <jarkao2@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ae27e98a51
commit
0220146411
1 changed files with 0 additions and 87 deletions
|
@ -622,95 +622,8 @@ static int netem_dump(struct Qdisc *sch, struct sk_buff *skb)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int netem_dump_class(struct Qdisc *sch, unsigned long cl,
|
|
||||||
struct sk_buff *skb, struct tcmsg *tcm)
|
|
||||||
{
|
|
||||||
struct netem_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;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int netem_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
|
||||||
struct Qdisc **old)
|
|
||||||
{
|
|
||||||
struct netem_sched_data *q = qdisc_priv(sch);
|
|
||||||
|
|
||||||
if (new == NULL)
|
|
||||||
new = &noop_qdisc;
|
|
||||||
|
|
||||||
sch_tree_lock(sch);
|
|
||||||
*old = xchg(&q->qdisc, new);
|
|
||||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
|
||||||
qdisc_reset(*old);
|
|
||||||
sch_tree_unlock(sch);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct Qdisc *netem_leaf(struct Qdisc *sch, unsigned long arg)
|
|
||||||
{
|
|
||||||
struct netem_sched_data *q = qdisc_priv(sch);
|
|
||||||
return q->qdisc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned long netem_get(struct Qdisc *sch, u32 classid)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void netem_put(struct Qdisc *sch, unsigned long arg)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static int netem_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
|
||||||
struct nlattr **tca, unsigned long *arg)
|
|
||||||
{
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int netem_delete(struct Qdisc *sch, unsigned long arg)
|
|
||||||
{
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void netem_walk(struct Qdisc *sch, struct qdisc_walker *walker)
|
|
||||||
{
|
|
||||||
if (!walker->stop) {
|
|
||||||
if (walker->count >= walker->skip)
|
|
||||||
if (walker->fn(sch, 1, walker) < 0) {
|
|
||||||
walker->stop = 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
walker->count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct tcf_proto **netem_find_tcf(struct Qdisc *sch, unsigned long cl)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct Qdisc_class_ops netem_class_ops = {
|
|
||||||
.graft = netem_graft,
|
|
||||||
.leaf = netem_leaf,
|
|
||||||
.get = netem_get,
|
|
||||||
.put = netem_put,
|
|
||||||
.change = netem_change_class,
|
|
||||||
.delete = netem_delete,
|
|
||||||
.walk = netem_walk,
|
|
||||||
.tcf_chain = netem_find_tcf,
|
|
||||||
.dump = netem_dump_class,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct Qdisc_ops netem_qdisc_ops __read_mostly = {
|
static struct Qdisc_ops netem_qdisc_ops __read_mostly = {
|
||||||
.id = "netem",
|
.id = "netem",
|
||||||
.cl_ops = &netem_class_ops,
|
|
||||||
.priv_size = sizeof(struct netem_sched_data),
|
.priv_size = sizeof(struct netem_sched_data),
|
||||||
.enqueue = netem_enqueue,
|
.enqueue = netem_enqueue,
|
||||||
.dequeue = netem_dequeue,
|
.dequeue = netem_dequeue,
|
||||||
|
|
Loading…
Reference in a new issue