Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: net/bridge/br_mdb.c br_mdb.c conflict was a function call being removed to fix a bug in 'net' but whose signature was changed in 'net-next'. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -339,6 +339,9 @@ static void tcf_bpf_cleanup(struct tc_action *act, int bind)
|
||||
bpf_prog_put(prog->filter);
|
||||
else
|
||||
bpf_prog_destroy(prog->filter);
|
||||
|
||||
kfree(prog->bpf_ops);
|
||||
kfree(prog->bpf_name);
|
||||
}
|
||||
|
||||
static struct tc_action_ops act_bpf_ops __read_mostly = {
|
||||
|
@@ -378,7 +378,7 @@ static int cls_bpf_change(struct net *net, struct sk_buff *in_skb,
|
||||
goto errout;
|
||||
|
||||
if (oldprog) {
|
||||
list_replace_rcu(&prog->link, &oldprog->link);
|
||||
list_replace_rcu(&oldprog->link, &prog->link);
|
||||
tcf_unbind_filter(tp, &oldprog->res);
|
||||
call_rcu(&oldprog->rcu, __cls_bpf_delete_prog);
|
||||
} else {
|
||||
|
@@ -425,6 +425,8 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
|
||||
if (!fnew)
|
||||
goto err2;
|
||||
|
||||
tcf_exts_init(&fnew->exts, TCA_FLOW_ACT, TCA_FLOW_POLICE);
|
||||
|
||||
fold = (struct flow_filter *)*arg;
|
||||
if (fold) {
|
||||
err = -EINVAL;
|
||||
@@ -486,7 +488,6 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
|
||||
fnew->mask = ~0U;
|
||||
fnew->tp = tp;
|
||||
get_random_bytes(&fnew->hashrnd, 4);
|
||||
tcf_exts_init(&fnew->exts, TCA_FLOW_ACT, TCA_FLOW_POLICE);
|
||||
}
|
||||
|
||||
fnew->perturb_timer.function = flow_perturbation;
|
||||
@@ -526,7 +527,7 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
|
||||
if (*arg == 0)
|
||||
list_add_tail_rcu(&fnew->list, &head->filters);
|
||||
else
|
||||
list_replace_rcu(&fnew->list, &fold->list);
|
||||
list_replace_rcu(&fold->list, &fnew->list);
|
||||
|
||||
*arg = (unsigned long)fnew;
|
||||
|
||||
|
@@ -499,7 +499,7 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
|
||||
*arg = (unsigned long) fnew;
|
||||
|
||||
if (fold) {
|
||||
list_replace_rcu(&fnew->list, &fold->list);
|
||||
list_replace_rcu(&fold->list, &fnew->list);
|
||||
tcf_unbind_filter(tp, &fold->res);
|
||||
call_rcu(&fold->rcu, fl_destroy_filter);
|
||||
} else {
|
||||
|
@@ -155,14 +155,23 @@ static unsigned int fq_codel_drop(struct Qdisc *sch)
|
||||
skb = dequeue_head(flow);
|
||||
len = qdisc_pkt_len(skb);
|
||||
q->backlogs[idx] -= len;
|
||||
kfree_skb(skb);
|
||||
sch->q.qlen--;
|
||||
qdisc_qstats_drop(sch);
|
||||
qdisc_qstats_backlog_dec(sch, skb);
|
||||
kfree_skb(skb);
|
||||
flow->dropped++;
|
||||
return idx;
|
||||
}
|
||||
|
||||
static unsigned int fq_codel_qdisc_drop(struct Qdisc *sch)
|
||||
{
|
||||
unsigned int prev_backlog;
|
||||
|
||||
prev_backlog = sch->qstats.backlog;
|
||||
fq_codel_drop(sch);
|
||||
return prev_backlog - sch->qstats.backlog;
|
||||
}
|
||||
|
||||
static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch)
|
||||
{
|
||||
struct fq_codel_sched_data *q = qdisc_priv(sch);
|
||||
@@ -604,7 +613,7 @@ static struct Qdisc_ops fq_codel_qdisc_ops __read_mostly = {
|
||||
.enqueue = fq_codel_enqueue,
|
||||
.dequeue = fq_codel_dequeue,
|
||||
.peek = qdisc_peek_dequeued,
|
||||
.drop = fq_codel_drop,
|
||||
.drop = fq_codel_qdisc_drop,
|
||||
.init = fq_codel_init,
|
||||
.reset = fq_codel_reset,
|
||||
.destroy = fq_codel_destroy,
|
||||
|
@@ -306,10 +306,10 @@ drop:
|
||||
len = qdisc_pkt_len(skb);
|
||||
slot->backlog -= len;
|
||||
sfq_dec(q, x);
|
||||
kfree_skb(skb);
|
||||
sch->q.qlen--;
|
||||
qdisc_qstats_drop(sch);
|
||||
qdisc_qstats_backlog_dec(sch, skb);
|
||||
kfree_skb(skb);
|
||||
return len;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user