Merge ra.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux
All conflicts were trivial overlapping changes, so reasonably easy to resolve. Signed-off-by: David S. Miller <davem@davemloft.net>
Šī revīzija ir iekļauta:
@@ -97,7 +97,7 @@ static int tcf_csum_init(struct net *net, struct nlattr *nla,
|
||||
}
|
||||
params_old = rtnl_dereference(p->params);
|
||||
|
||||
params_new->action = parm->action;
|
||||
p->tcf_action = parm->action;
|
||||
params_new->update_flags = parm->update_flags;
|
||||
rcu_assign_pointer(p->params, params_new);
|
||||
if (params_old)
|
||||
@@ -567,7 +567,7 @@ static int tcf_csum(struct sk_buff *skb, const struct tc_action *a,
|
||||
tcf_lastuse_update(&p->tcf_tm);
|
||||
bstats_cpu_update(this_cpu_ptr(p->common.cpu_bstats), skb);
|
||||
|
||||
action = params->action;
|
||||
action = READ_ONCE(p->tcf_action);
|
||||
if (unlikely(action == TC_ACT_SHOT))
|
||||
goto drop_stats;
|
||||
|
||||
@@ -605,11 +605,11 @@ static int tcf_csum_dump(struct sk_buff *skb, struct tc_action *a, int bind,
|
||||
.index = p->tcf_index,
|
||||
.refcnt = refcount_read(&p->tcf_refcnt) - ref,
|
||||
.bindcnt = atomic_read(&p->tcf_bindcnt) - bind,
|
||||
.action = p->tcf_action,
|
||||
};
|
||||
struct tcf_t t;
|
||||
|
||||
params = rtnl_dereference(p->params);
|
||||
opt.action = params->action;
|
||||
opt.update_flags = params->update_flags;
|
||||
|
||||
if (nla_put(skb, TCA_CSUM_PARMS, sizeof(opt), &opt))
|
||||
|
@@ -37,7 +37,7 @@ static int tunnel_key_act(struct sk_buff *skb, const struct tc_action *a,
|
||||
|
||||
tcf_lastuse_update(&t->tcf_tm);
|
||||
bstats_cpu_update(this_cpu_ptr(t->common.cpu_bstats), skb);
|
||||
action = params->action;
|
||||
action = READ_ONCE(t->tcf_action);
|
||||
|
||||
switch (params->tcft_action) {
|
||||
case TCA_TUNNEL_KEY_ACT_RELEASE:
|
||||
@@ -360,7 +360,7 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,
|
||||
|
||||
params_old = rtnl_dereference(t->params);
|
||||
|
||||
params_new->action = parm->action;
|
||||
t->tcf_action = parm->action;
|
||||
params_new->tcft_action = parm->t_action;
|
||||
params_new->tcft_enc_metadata = metadata;
|
||||
|
||||
@@ -489,13 +489,13 @@ static int tunnel_key_dump(struct sk_buff *skb, struct tc_action *a,
|
||||
.index = t->tcf_index,
|
||||
.refcnt = refcount_read(&t->tcf_refcnt) - ref,
|
||||
.bindcnt = atomic_read(&t->tcf_bindcnt) - bind,
|
||||
.action = t->tcf_action,
|
||||
};
|
||||
struct tcf_t tm;
|
||||
|
||||
params = rtnl_dereference(t->params);
|
||||
|
||||
opt.t_action = params->tcft_action;
|
||||
opt.action = params->action;
|
||||
|
||||
if (nla_put(skb, TCA_TUNNEL_KEY_PARMS, sizeof(opt), &opt))
|
||||
goto nla_put_failure;
|
||||
|
@@ -1098,7 +1098,7 @@ static void tfilter_notify_chain(struct net *net, struct sk_buff *oskb,
|
||||
for (tp = rtnl_dereference(chain->filter_chain);
|
||||
tp; tp = rtnl_dereference(tp->next))
|
||||
tfilter_notify(net, oskb, n, tp, block,
|
||||
q, parent, 0, event, false);
|
||||
q, parent, NULL, event, false);
|
||||
}
|
||||
|
||||
static int tc_new_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
|
||||
@@ -1489,7 +1489,7 @@ static bool tcf_chain_dump(struct tcf_chain *chain, struct Qdisc *q, u32 parent,
|
||||
memset(&cb->args[1], 0,
|
||||
sizeof(cb->args) - sizeof(cb->args[0]));
|
||||
if (cb->args[1] == 0) {
|
||||
if (tcf_fill_node(net, skb, tp, block, q, parent, 0,
|
||||
if (tcf_fill_node(net, skb, tp, block, q, parent, NULL,
|
||||
NETLINK_CB(cb->skb).portid,
|
||||
cb->nlh->nlmsg_seq, NLM_F_MULTI,
|
||||
RTM_NEWTFILTER) <= 0)
|
||||
|
@@ -479,24 +479,28 @@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt,
|
||||
q->cparams.mtu = psched_mtu(qdisc_dev(sch));
|
||||
|
||||
if (opt) {
|
||||
int err = fq_codel_change(sch, opt, extack);
|
||||
err = fq_codel_change(sch, opt, extack);
|
||||
if (err)
|
||||
return err;
|
||||
goto init_failure;
|
||||
}
|
||||
|
||||
err = tcf_block_get(&q->block, &q->filter_list, sch, extack);
|
||||
if (err)
|
||||
return err;
|
||||
goto init_failure;
|
||||
|
||||
if (!q->flows) {
|
||||
q->flows = kvcalloc(q->flows_cnt,
|
||||
sizeof(struct fq_codel_flow),
|
||||
GFP_KERNEL);
|
||||
if (!q->flows)
|
||||
return -ENOMEM;
|
||||
if (!q->flows) {
|
||||
err = -ENOMEM;
|
||||
goto init_failure;
|
||||
}
|
||||
q->backlogs = kvcalloc(q->flows_cnt, sizeof(u32), GFP_KERNEL);
|
||||
if (!q->backlogs)
|
||||
return -ENOMEM;
|
||||
if (!q->backlogs) {
|
||||
err = -ENOMEM;
|
||||
goto alloc_failure;
|
||||
}
|
||||
for (i = 0; i < q->flows_cnt; i++) {
|
||||
struct fq_codel_flow *flow = q->flows + i;
|
||||
|
||||
@@ -509,6 +513,13 @@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt,
|
||||
else
|
||||
sch->flags &= ~TCQ_F_CAN_BYPASS;
|
||||
return 0;
|
||||
|
||||
alloc_failure:
|
||||
kvfree(q->flows);
|
||||
q->flows = NULL;
|
||||
init_failure:
|
||||
q->flows_cnt = 0;
|
||||
return err;
|
||||
}
|
||||
|
||||
static int fq_codel_dump(struct Qdisc *sch, struct sk_buff *skb)
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user