blob: d0b7f774a4d49a64e4979f7e624d8508cda3c1ac [file] [log] [blame]
--- a/compat/net-sched-sch_fq_codel.c
+++ b/compat/net-sched-sch_fq_codel.c
@@ -65,6 +65,9 @@ struct fq_codel_sched_data {
struct list_head new_flows; /* list of new flows */
struct list_head old_flows; /* list of old flows */
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39))
+ u32 limit;
+#endif
};
static unsigned int fq_codel_hash(const struct fq_codel_sched_data *q,
@@ -195,7 +198,11 @@ static int fq_codel_enqueue(struct sk_bu
flow->deficit = q->quantum;
flow->dropped = 0;
}
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39))
+ if (++sch->q.qlen <= q->limit)
+#else
if (++sch->q.qlen <= sch->limit)
+#endif
return NET_XMIT_SUCCESS;
q->drop_overlimit++;
@@ -333,7 +340,11 @@ static int fq_codel_change(struct Qdisc
}
if (tb[TCA_FQ_CODEL_LIMIT])
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39))
+ q->limit = nla_get_u32(tb[TCA_FQ_CODEL_LIMIT]);
+#else
sch->limit = nla_get_u32(tb[TCA_FQ_CODEL_LIMIT]);
+#endif
if (tb[TCA_FQ_CODEL_ECN])
q->cparams.ecn = !!nla_get_u32(tb[TCA_FQ_CODEL_ECN]);
@@ -341,7 +352,11 @@ static int fq_codel_change(struct Qdisc
if (tb[TCA_FQ_CODEL_QUANTUM])
q->quantum = max(256U, nla_get_u32(tb[TCA_FQ_CODEL_QUANTUM]));
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39))
+ while (sch->q.qlen > q->limit) {
+#else
while (sch->q.qlen > sch->limit) {
+#endif
struct sk_buff *skb = fq_codel_dequeue(sch);
kfree_skb(skb);
@@ -377,7 +392,11 @@ static void fq_codel_destroy(struct Qdis
{
struct fq_codel_sched_data *q = qdisc_priv(sch);
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,25))
+ tcf_destroy_chain(q->filter_list);
+#else
tcf_destroy_chain(&q->filter_list);
+#endif
fq_codel_free(q->backlogs);
fq_codel_free(q->flows);
}
@@ -387,7 +406,11 @@ static int fq_codel_init(struct Qdisc *s
struct fq_codel_sched_data *q = qdisc_priv(sch);
int i;
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39))
+ q->limit = 10*1024;
+#else
sch->limit = 10*1024;
+#endif
q->flows_cnt = 1024;
q->quantum = psched_mtu(qdisc_dev(sch));
q->perturbation = prandom_u32();
@@ -420,7 +443,11 @@ static int fq_codel_init(struct Qdisc *s
codel_vars_init(&flow->cvars);
}
}
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39))
+ if (q->limit >= 1)
+#else
if (sch->limit >= 1)
+#endif
sch->flags |= TCQ_F_CAN_BYPASS;
else
sch->flags &= ~TCQ_F_CAN_BYPASS;
@@ -439,7 +466,11 @@ static int fq_codel_dump(struct Qdisc *s
if (nla_put_u32(skb, TCA_FQ_CODEL_TARGET,
codel_time_to_us(q->cparams.target)) ||
nla_put_u32(skb, TCA_FQ_CODEL_LIMIT,
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39))
+ q->limit) ||
+#else
sch->limit) ||
+#endif
nla_put_u32(skb, TCA_FQ_CODEL_INTERVAL,
codel_time_to_us(q->cparams.interval)) ||
nla_put_u32(skb, TCA_FQ_CODEL_ECN,
@@ -598,7 +629,9 @@ static struct Qdisc_ops fq_codel_qdisc_o
.priv_size = sizeof(struct fq_codel_sched_data),
.enqueue = fq_codel_enqueue,
.dequeue = fq_codel_dequeue,
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
.peek = qdisc_peek_dequeued,
+#endif
.drop = fq_codel_drop,
.init = fq_codel_init,
.reset = fq_codel_reset,