diff options
author | David S. Miller <davem@davemloft.net> | 2015-08-13 19:23:11 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-08-13 19:23:11 -0400 |
commit | 182ad468e70fc7e8ff2e5d64344c690beaa00ddd (patch) | |
tree | af0b9b8da89ed03629c71f6829845c301485d289 /net/sched | |
parent | e8fed985d7bd6cda695e196028b54a5f3d2d91bb (diff) | |
parent | 5b3e2e14eaa2a98232a4f292341fb88438685734 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/cavium/Kconfig
The cavium conflict was overlapping dependency
changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/act_mirred.c | 2 | ||||
-rw-r--r-- | net/sched/sch_fq_codel.c | 22 |
2 files changed, 21 insertions, 3 deletions
diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c index 19cd8904efa0..2d1be4a760fd 100644 --- a/net/sched/act_mirred.c +++ b/net/sched/act_mirred.c | |||
@@ -101,6 +101,8 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla, | |||
101 | return ret; | 101 | return ret; |
102 | ret = ACT_P_CREATED; | 102 | ret = ACT_P_CREATED; |
103 | } else { | 103 | } else { |
104 | if (bind) | ||
105 | return 0; | ||
104 | if (!ovr) { | 106 | if (!ovr) { |
105 | tcf_hash_release(a, bind); | 107 | tcf_hash_release(a, bind); |
106 | return -EEXIST; | 108 | return -EEXIST; |
diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c index 21ca33c9f036..a9ba030435a2 100644 --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c | |||
@@ -288,10 +288,26 @@ begin: | |||
288 | 288 | ||
289 | static void fq_codel_reset(struct Qdisc *sch) | 289 | static void fq_codel_reset(struct Qdisc *sch) |
290 | { | 290 | { |
291 | struct sk_buff *skb; | 291 | struct fq_codel_sched_data *q = qdisc_priv(sch); |
292 | int i; | ||
292 | 293 | ||
293 | while ((skb = fq_codel_dequeue(sch)) != NULL) | 294 | INIT_LIST_HEAD(&q->new_flows); |
294 | kfree_skb(skb); | 295 | INIT_LIST_HEAD(&q->old_flows); |
296 | for (i = 0; i < q->flows_cnt; i++) { | ||
297 | struct fq_codel_flow *flow = q->flows + i; | ||
298 | |||
299 | while (flow->head) { | ||
300 | struct sk_buff *skb = dequeue_head(flow); | ||
301 | |||
302 | qdisc_qstats_backlog_dec(sch, skb); | ||
303 | kfree_skb(skb); | ||
304 | } | ||
305 | |||
306 | INIT_LIST_HEAD(&flow->flowchain); | ||
307 | codel_vars_init(&flow->cvars); | ||
308 | } | ||
309 | memset(q->backlogs, 0, q->flows_cnt * sizeof(u32)); | ||
310 | sch->q.qlen = 0; | ||
295 | } | 311 | } |
296 | 312 | ||
297 | static const struct nla_policy fq_codel_policy[TCA_FQ_CODEL_MAX + 1] = { | 313 | static const struct nla_policy fq_codel_policy[TCA_FQ_CODEL_MAX + 1] = { |