[PATCH 0/6] Add qdisc->ops->peek() support.
From: Jarek Poplawski <hidden>
Date: 2008-10-16 09:46:52
[Subject: Re: [PATCH 00/14]: Killing qdisc->ops->requeue().] On Tue, Oct 14, 2008 at 10:44:13PM +0200, Patrick McHardy wrote: ...
I think we really need a peek operation since most qdiscs do have some internal priorization. The question is whether all qdiscs need it; I tend to think no. Plugging two non-work-conserving qdiscs together doesn't make much sense, so we could just prevent this. This means we would only need to add ->peek support to the work-conserving qdiscs, which looks pretty easy in all cases. We actually don't even have to prevent plugging two non-work-conserving qdiscs, the ones that need the peek operation could just check whether the inner qdisc supports it. Just as a demonstration how easy adding a peek operation to the work-conserving qdiscs actually is. It doesn't need to keep or change any internal state in many cases thanks to the guarantee that the packet will either be dequeued or, if another packet arrives, the upper qdisc will immediately ->peek again to reevaluate the state.
So here is my try (I hope I didn't miss Patrick's intentions to much). PATCH 6/6 adds my simple idea not to prevent even nonsense configs. It is optional. Thanks, Jarek P. PS: after this patchset only netem_enqueue() needs qdisc->requeue(), but I hope this won't take too long. include/net/sch_generic.h | 29 +++++++++++++++++++++++++++++ net/sched/sch_api.c | 6 ++++++ net/sched/sch_atm.c | 23 ++++++++++++++++++----- net/sched/sch_blackhole.c | 1 + net/sched/sch_cbq.c | 1 + net/sched/sch_dsmark.c | 10 ++++++++++ net/sched/sch_fifo.c | 2 ++ net/sched/sch_generic.c | 16 ++++++++++++++++ net/sched/sch_gred.c | 1 + net/sched/sch_hfsc.c | 15 ++++----------- net/sched/sch_htb.c | 1 + net/sched/sch_multiq.c | 29 +++++++++++++++++++++++++++++ net/sched/sch_netem.c | 15 +++++++-------- net/sched/sch_prio.c | 14 ++++++++++++++ net/sched/sch_red.c | 9 +++++++++ net/sched/sch_sfq.c | 12 ++++++++++++ net/sched/sch_tbf.c | 13 ++++++------- net/sched/sch_teql.c | 9 +++++++++ 18 files changed, 175 insertions(+), 31 deletions(-)