Commit 98909f95 authored by David S. Miller's avatar David S. Miller

Merge branch 'net_sched-clean-up-filter-handle'

Cong Wang says:

====================
net_sched: clean up filter handle

This patchset sits in my local branch for a long time, it is time to
send it out. It cleans up the ambiguous use of 'unsigned long fh',
please see each of them for details.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 08bd10ff 8113c095
...@@ -11,7 +11,7 @@ struct tcf_walker { ...@@ -11,7 +11,7 @@ struct tcf_walker {
int stop; int stop;
int skip; int skip;
int count; int count;
int (*fn)(struct tcf_proto *, unsigned long node, struct tcf_walker *); int (*fn)(struct tcf_proto *, void *node, struct tcf_walker *);
}; };
int register_tcf_proto_ops(struct tcf_proto_ops *ops); int register_tcf_proto_ops(struct tcf_proto_ops *ops);
......
...@@ -213,16 +213,16 @@ struct tcf_proto_ops { ...@@ -213,16 +213,16 @@ struct tcf_proto_ops {
int (*init)(struct tcf_proto*); int (*init)(struct tcf_proto*);
void (*destroy)(struct tcf_proto*); void (*destroy)(struct tcf_proto*);
unsigned long (*get)(struct tcf_proto*, u32 handle); void* (*get)(struct tcf_proto*, u32 handle);
int (*change)(struct net *net, struct sk_buff *, int (*change)(struct net *net, struct sk_buff *,
struct tcf_proto*, unsigned long, struct tcf_proto*, unsigned long,
u32 handle, struct nlattr **, u32 handle, struct nlattr **,
unsigned long *, bool); void **, bool);
int (*delete)(struct tcf_proto*, unsigned long, bool*); int (*delete)(struct tcf_proto*, void *, bool*);
void (*walk)(struct tcf_proto*, struct tcf_walker *arg); void (*walk)(struct tcf_proto*, struct tcf_walker *arg);
/* rtnetlink specific */ /* rtnetlink specific */
int (*dump)(struct net*, struct tcf_proto*, unsigned long, int (*dump)(struct net*, struct tcf_proto*, void *,
struct sk_buff *skb, struct tcmsg*); struct sk_buff *skb, struct tcmsg*);
struct module *owner; struct module *owner;
......
...@@ -102,7 +102,11 @@ EXPORT_SYMBOL(unregister_tcf_proto_ops); ...@@ -102,7 +102,11 @@ EXPORT_SYMBOL(unregister_tcf_proto_ops);
static int tfilter_notify(struct net *net, struct sk_buff *oskb, static int tfilter_notify(struct net *net, struct sk_buff *oskb,
struct nlmsghdr *n, struct tcf_proto *tp, struct nlmsghdr *n, struct tcf_proto *tp,
unsigned long fh, int event, bool unicast); void *fh, int event, bool unicast);
static int tfilter_del_notify(struct net *net, struct sk_buff *oskb,
struct nlmsghdr *n, struct tcf_proto *tp,
void *fh, bool unicast, bool *last);
static void tfilter_notify_chain(struct net *net, struct sk_buff *oskb, static void tfilter_notify_chain(struct net *net, struct sk_buff *oskb,
struct nlmsghdr *n, struct nlmsghdr *n,
...@@ -428,7 +432,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, ...@@ -428,7 +432,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
struct tcf_proto *tp; struct tcf_proto *tp;
const struct Qdisc_class_ops *cops; const struct Qdisc_class_ops *cops;
unsigned long cl; unsigned long cl;
unsigned long fh; void *fh;
int err; int err;
int tp_created; int tp_created;
...@@ -567,7 +571,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, ...@@ -567,7 +571,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
fh = tp->ops->get(tp, t->tcm_handle); fh = tp->ops->get(tp, t->tcm_handle);
if (fh == 0) { if (!fh) {
if (n->nlmsg_type == RTM_DELTFILTER && t->tcm_handle == 0) { if (n->nlmsg_type == RTM_DELTFILTER && t->tcm_handle == 0) {
tcf_chain_tp_remove(chain, &chain_info, tp); tcf_chain_tp_remove(chain, &chain_info, tp);
tfilter_notify(net, skb, n, tp, fh, tfilter_notify(net, skb, n, tp, fh,
...@@ -595,11 +599,10 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, ...@@ -595,11 +599,10 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
} }
break; break;
case RTM_DELTFILTER: case RTM_DELTFILTER:
err = tp->ops->delete(tp, fh, &last); err = tfilter_del_notify(net, skb, n, tp, fh, false,
&last);
if (err) if (err)
goto errout; goto errout;
tfilter_notify(net, skb, n, tp, t->tcm_handle,
RTM_DELTFILTER, false);
if (last) { if (last) {
tcf_chain_tp_remove(chain, &chain_info, tp); tcf_chain_tp_remove(chain, &chain_info, tp);
tcf_proto_destroy(tp); tcf_proto_destroy(tp);
...@@ -638,7 +641,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, ...@@ -638,7 +641,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
} }
static int tcf_fill_node(struct net *net, struct sk_buff *skb, static int tcf_fill_node(struct net *net, struct sk_buff *skb,
struct tcf_proto *tp, unsigned long fh, u32 portid, struct tcf_proto *tp, void *fh, u32 portid,
u32 seq, u16 flags, int event) u32 seq, u16 flags, int event)
{ {
struct tcmsg *tcm; struct tcmsg *tcm;
...@@ -659,9 +662,9 @@ static int tcf_fill_node(struct net *net, struct sk_buff *skb, ...@@ -659,9 +662,9 @@ static int tcf_fill_node(struct net *net, struct sk_buff *skb,
goto nla_put_failure; goto nla_put_failure;
if (nla_put_u32(skb, TCA_CHAIN, tp->chain->index)) if (nla_put_u32(skb, TCA_CHAIN, tp->chain->index))
goto nla_put_failure; goto nla_put_failure;
tcm->tcm_handle = fh; if (!fh) {
if (RTM_DELTFILTER != event) {
tcm->tcm_handle = 0; tcm->tcm_handle = 0;
} else {
if (tp->ops->dump && tp->ops->dump(net, tp, fh, skb, tcm) < 0) if (tp->ops->dump && tp->ops->dump(net, tp, fh, skb, tcm) < 0)
goto nla_put_failure; goto nla_put_failure;
} }
...@@ -676,7 +679,7 @@ static int tcf_fill_node(struct net *net, struct sk_buff *skb, ...@@ -676,7 +679,7 @@ static int tcf_fill_node(struct net *net, struct sk_buff *skb,
static int tfilter_notify(struct net *net, struct sk_buff *oskb, static int tfilter_notify(struct net *net, struct sk_buff *oskb,
struct nlmsghdr *n, struct tcf_proto *tp, struct nlmsghdr *n, struct tcf_proto *tp,
unsigned long fh, int event, bool unicast) void *fh, int event, bool unicast)
{ {
struct sk_buff *skb; struct sk_buff *skb;
u32 portid = oskb ? NETLINK_CB(oskb).portid : 0; u32 portid = oskb ? NETLINK_CB(oskb).portid : 0;
...@@ -698,14 +701,44 @@ static int tfilter_notify(struct net *net, struct sk_buff *oskb, ...@@ -698,14 +701,44 @@ static int tfilter_notify(struct net *net, struct sk_buff *oskb,
n->nlmsg_flags & NLM_F_ECHO); n->nlmsg_flags & NLM_F_ECHO);
} }
static int tfilter_del_notify(struct net *net, struct sk_buff *oskb,
struct nlmsghdr *n, struct tcf_proto *tp,
void *fh, bool unicast, bool *last)
{
struct sk_buff *skb;
u32 portid = oskb ? NETLINK_CB(oskb).portid : 0;
int err;
skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);
if (!skb)
return -ENOBUFS;
if (tcf_fill_node(net, skb, tp, fh, portid, n->nlmsg_seq,
n->nlmsg_flags, RTM_DELTFILTER) <= 0) {
kfree_skb(skb);
return -EINVAL;
}
err = tp->ops->delete(tp, fh, last);
if (err) {
kfree_skb(skb);
return err;
}
if (unicast)
return netlink_unicast(net->rtnl, skb, portid, MSG_DONTWAIT);
return rtnetlink_send(skb, net, portid, RTNLGRP_TC,
n->nlmsg_flags & NLM_F_ECHO);
}
struct tcf_dump_args { struct tcf_dump_args {
struct tcf_walker w; struct tcf_walker w;
struct sk_buff *skb; struct sk_buff *skb;
struct netlink_callback *cb; struct netlink_callback *cb;
}; };
static int tcf_node_dump(struct tcf_proto *tp, unsigned long n, static int tcf_node_dump(struct tcf_proto *tp, void *n, struct tcf_walker *arg)
struct tcf_walker *arg)
{ {
struct tcf_dump_args *a = (void *)arg; struct tcf_dump_args *a = (void *)arg;
struct net *net = sock_net(a->skb->sk); struct net *net = sock_net(a->skb->sk);
......
...@@ -56,20 +56,18 @@ static int basic_classify(struct sk_buff *skb, const struct tcf_proto *tp, ...@@ -56,20 +56,18 @@ static int basic_classify(struct sk_buff *skb, const struct tcf_proto *tp,
return -1; return -1;
} }
static unsigned long basic_get(struct tcf_proto *tp, u32 handle) static void *basic_get(struct tcf_proto *tp, u32 handle)
{ {
unsigned long l = 0UL;
struct basic_head *head = rtnl_dereference(tp->root); struct basic_head *head = rtnl_dereference(tp->root);
struct basic_filter *f; struct basic_filter *f;
list_for_each_entry(f, &head->flist, link) { list_for_each_entry(f, &head->flist, link) {
if (f->handle == handle) { if (f->handle == handle) {
l = (unsigned long) f; return f;
break;
} }
} }
return l; return NULL;
} }
static int basic_init(struct tcf_proto *tp) static int basic_init(struct tcf_proto *tp)
...@@ -106,10 +104,10 @@ static void basic_destroy(struct tcf_proto *tp) ...@@ -106,10 +104,10 @@ static void basic_destroy(struct tcf_proto *tp)
kfree_rcu(head, rcu); kfree_rcu(head, rcu);
} }
static int basic_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int basic_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
struct basic_head *head = rtnl_dereference(tp->root); struct basic_head *head = rtnl_dereference(tp->root);
struct basic_filter *f = (struct basic_filter *) arg; struct basic_filter *f = arg;
list_del_rcu(&f->link); list_del_rcu(&f->link);
tcf_unbind_filter(tp, &f->res); tcf_unbind_filter(tp, &f->res);
...@@ -149,7 +147,7 @@ static int basic_set_parms(struct net *net, struct tcf_proto *tp, ...@@ -149,7 +147,7 @@ static int basic_set_parms(struct net *net, struct tcf_proto *tp,
static int basic_change(struct net *net, struct sk_buff *in_skb, static int basic_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, u32 handle, struct tcf_proto *tp, unsigned long base, u32 handle,
struct nlattr **tca, unsigned long *arg, bool ovr) struct nlattr **tca, void **arg, bool ovr)
{ {
int err; int err;
struct basic_head *head = rtnl_dereference(tp->root); struct basic_head *head = rtnl_dereference(tp->root);
...@@ -202,7 +200,7 @@ static int basic_change(struct net *net, struct sk_buff *in_skb, ...@@ -202,7 +200,7 @@ static int basic_change(struct net *net, struct sk_buff *in_skb,
if (err < 0) if (err < 0)
goto errout; goto errout;
*arg = (unsigned long)fnew; *arg = fnew;
if (fold) { if (fold) {
list_replace_rcu(&fold->link, &fnew->link); list_replace_rcu(&fold->link, &fnew->link);
...@@ -228,7 +226,7 @@ static void basic_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -228,7 +226,7 @@ static void basic_walk(struct tcf_proto *tp, struct tcf_walker *arg)
if (arg->count < arg->skip) if (arg->count < arg->skip)
goto skip; goto skip;
if (arg->fn(tp, (unsigned long) f, arg) < 0) { if (arg->fn(tp, f, arg) < 0) {
arg->stop = 1; arg->stop = 1;
break; break;
} }
...@@ -237,10 +235,10 @@ static void basic_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -237,10 +235,10 @@ static void basic_walk(struct tcf_proto *tp, struct tcf_walker *arg)
} }
} }
static int basic_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int basic_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct basic_filter *f = (struct basic_filter *) fh; struct basic_filter *f = fh;
struct nlattr *nest; struct nlattr *nest;
if (f == NULL) if (f == NULL)
......
...@@ -270,11 +270,11 @@ static void __cls_bpf_delete(struct tcf_proto *tp, struct cls_bpf_prog *prog) ...@@ -270,11 +270,11 @@ static void __cls_bpf_delete(struct tcf_proto *tp, struct cls_bpf_prog *prog)
call_rcu(&prog->rcu, cls_bpf_delete_prog_rcu); call_rcu(&prog->rcu, cls_bpf_delete_prog_rcu);
} }
static int cls_bpf_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int cls_bpf_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
struct cls_bpf_head *head = rtnl_dereference(tp->root); struct cls_bpf_head *head = rtnl_dereference(tp->root);
__cls_bpf_delete(tp, (struct cls_bpf_prog *) arg); __cls_bpf_delete(tp, arg);
*last = list_empty(&head->plist); *last = list_empty(&head->plist);
return 0; return 0;
} }
...@@ -290,20 +290,17 @@ static void cls_bpf_destroy(struct tcf_proto *tp) ...@@ -290,20 +290,17 @@ static void cls_bpf_destroy(struct tcf_proto *tp)
kfree_rcu(head, rcu); kfree_rcu(head, rcu);
} }
static unsigned long cls_bpf_get(struct tcf_proto *tp, u32 handle) static void *cls_bpf_get(struct tcf_proto *tp, u32 handle)
{ {
struct cls_bpf_head *head = rtnl_dereference(tp->root); struct cls_bpf_head *head = rtnl_dereference(tp->root);
struct cls_bpf_prog *prog; struct cls_bpf_prog *prog;
unsigned long ret = 0UL;
list_for_each_entry(prog, &head->plist, link) { list_for_each_entry(prog, &head->plist, link) {
if (prog->handle == handle) { if (prog->handle == handle)
ret = (unsigned long) prog; return prog;
break;
}
} }
return ret; return NULL;
} }
static int cls_bpf_prog_from_ops(struct nlattr **tb, struct cls_bpf_prog *prog) static int cls_bpf_prog_from_ops(struct nlattr **tb, struct cls_bpf_prog *prog)
...@@ -448,10 +445,10 @@ static u32 cls_bpf_grab_new_handle(struct tcf_proto *tp, ...@@ -448,10 +445,10 @@ static u32 cls_bpf_grab_new_handle(struct tcf_proto *tp,
static int cls_bpf_change(struct net *net, struct sk_buff *in_skb, static int cls_bpf_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, struct tcf_proto *tp, unsigned long base,
u32 handle, struct nlattr **tca, u32 handle, struct nlattr **tca,
unsigned long *arg, bool ovr) void **arg, bool ovr)
{ {
struct cls_bpf_head *head = rtnl_dereference(tp->root); struct cls_bpf_head *head = rtnl_dereference(tp->root);
struct cls_bpf_prog *oldprog = (struct cls_bpf_prog *) *arg; struct cls_bpf_prog *oldprog = *arg;
struct nlattr *tb[TCA_BPF_MAX + 1]; struct nlattr *tb[TCA_BPF_MAX + 1];
struct cls_bpf_prog *prog; struct cls_bpf_prog *prog;
int ret; int ret;
...@@ -509,7 +506,7 @@ static int cls_bpf_change(struct net *net, struct sk_buff *in_skb, ...@@ -509,7 +506,7 @@ static int cls_bpf_change(struct net *net, struct sk_buff *in_skb,
list_add_rcu(&prog->link, &head->plist); list_add_rcu(&prog->link, &head->plist);
} }
*arg = (unsigned long) prog; *arg = prog;
return 0; return 0;
errout: errout:
...@@ -557,10 +554,10 @@ static int cls_bpf_dump_ebpf_info(const struct cls_bpf_prog *prog, ...@@ -557,10 +554,10 @@ static int cls_bpf_dump_ebpf_info(const struct cls_bpf_prog *prog,
return 0; return 0;
} }
static int cls_bpf_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int cls_bpf_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *tm) struct sk_buff *skb, struct tcmsg *tm)
{ {
struct cls_bpf_prog *prog = (struct cls_bpf_prog *) fh; struct cls_bpf_prog *prog = fh;
struct nlattr *nest; struct nlattr *nest;
u32 bpf_flags = 0; u32 bpf_flags = 0;
int ret; int ret;
...@@ -618,7 +615,7 @@ static void cls_bpf_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -618,7 +615,7 @@ static void cls_bpf_walk(struct tcf_proto *tp, struct tcf_walker *arg)
list_for_each_entry(prog, &head->plist, link) { list_for_each_entry(prog, &head->plist, link) {
if (arg->count < arg->skip) if (arg->count < arg->skip)
goto skip; goto skip;
if (arg->fn(tp, (unsigned long) prog, arg) < 0) { if (arg->fn(tp, prog, arg) < 0) {
arg->stop = 1; arg->stop = 1;
break; break;
} }
......
...@@ -43,9 +43,9 @@ static int cls_cgroup_classify(struct sk_buff *skb, const struct tcf_proto *tp, ...@@ -43,9 +43,9 @@ static int cls_cgroup_classify(struct sk_buff *skb, const struct tcf_proto *tp,
return tcf_exts_exec(skb, &head->exts, res); return tcf_exts_exec(skb, &head->exts, res);
} }
static unsigned long cls_cgroup_get(struct tcf_proto *tp, u32 handle) static void *cls_cgroup_get(struct tcf_proto *tp, u32 handle)
{ {
return 0UL; return NULL;
} }
static int cls_cgroup_init(struct tcf_proto *tp) static int cls_cgroup_init(struct tcf_proto *tp)
...@@ -71,7 +71,7 @@ static void cls_cgroup_destroy_rcu(struct rcu_head *root) ...@@ -71,7 +71,7 @@ static void cls_cgroup_destroy_rcu(struct rcu_head *root)
static int cls_cgroup_change(struct net *net, struct sk_buff *in_skb, static int cls_cgroup_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, struct tcf_proto *tp, unsigned long base,
u32 handle, struct nlattr **tca, u32 handle, struct nlattr **tca,
unsigned long *arg, bool ovr) void **arg, bool ovr)
{ {
struct nlattr *tb[TCA_CGROUP_MAX + 1]; struct nlattr *tb[TCA_CGROUP_MAX + 1];
struct cls_cgroup_head *head = rtnl_dereference(tp->root); struct cls_cgroup_head *head = rtnl_dereference(tp->root);
...@@ -128,7 +128,7 @@ static void cls_cgroup_destroy(struct tcf_proto *tp) ...@@ -128,7 +128,7 @@ static void cls_cgroup_destroy(struct tcf_proto *tp)
call_rcu(&head->rcu, cls_cgroup_destroy_rcu); call_rcu(&head->rcu, cls_cgroup_destroy_rcu);
} }
static int cls_cgroup_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int cls_cgroup_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
...@@ -140,7 +140,7 @@ static void cls_cgroup_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -140,7 +140,7 @@ static void cls_cgroup_walk(struct tcf_proto *tp, struct tcf_walker *arg)
if (arg->count < arg->skip) if (arg->count < arg->skip)
goto skip; goto skip;
if (arg->fn(tp, (unsigned long) head, arg) < 0) { if (arg->fn(tp, head, arg) < 0) {
arg->stop = 1; arg->stop = 1;
return; return;
} }
...@@ -148,7 +148,7 @@ static void cls_cgroup_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -148,7 +148,7 @@ static void cls_cgroup_walk(struct tcf_proto *tp, struct tcf_walker *arg)
arg->count++; arg->count++;
} }
static int cls_cgroup_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int cls_cgroup_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct cls_cgroup_head *head = rtnl_dereference(tp->root); struct cls_cgroup_head *head = rtnl_dereference(tp->root);
......
...@@ -382,7 +382,7 @@ static void flow_destroy_filter(struct rcu_head *head) ...@@ -382,7 +382,7 @@ static void flow_destroy_filter(struct rcu_head *head)
static int flow_change(struct net *net, struct sk_buff *in_skb, static int flow_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, struct tcf_proto *tp, unsigned long base,
u32 handle, struct nlattr **tca, u32 handle, struct nlattr **tca,
unsigned long *arg, bool ovr) void **arg, bool ovr)
{ {
struct flow_head *head = rtnl_dereference(tp->root); struct flow_head *head = rtnl_dereference(tp->root);
struct flow_filter *fold, *fnew; struct flow_filter *fold, *fnew;
...@@ -439,7 +439,7 @@ static int flow_change(struct net *net, struct sk_buff *in_skb, ...@@ -439,7 +439,7 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
if (err < 0) if (err < 0)
goto err2; goto err2;
fold = (struct flow_filter *)*arg; fold = *arg;
if (fold) { if (fold) {
err = -EINVAL; err = -EINVAL;
if (fold->handle != handle && handle) if (fold->handle != handle && handle)
...@@ -532,12 +532,12 @@ static int flow_change(struct net *net, struct sk_buff *in_skb, ...@@ -532,12 +532,12 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
if (perturb_period) if (perturb_period)
mod_timer(&fnew->perturb_timer, jiffies + perturb_period); mod_timer(&fnew->perturb_timer, jiffies + perturb_period);
if (*arg == 0) if (!*arg)
list_add_tail_rcu(&fnew->list, &head->filters); list_add_tail_rcu(&fnew->list, &head->filters);
else else
list_replace_rcu(&fold->list, &fnew->list); list_replace_rcu(&fold->list, &fnew->list);
*arg = (unsigned long)fnew; *arg = fnew;
if (fold) if (fold)
call_rcu(&fold->rcu, flow_destroy_filter); call_rcu(&fold->rcu, flow_destroy_filter);
...@@ -551,10 +551,10 @@ static int flow_change(struct net *net, struct sk_buff *in_skb, ...@@ -551,10 +551,10 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
return err; return err;
} }
static int flow_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int flow_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
struct flow_head *head = rtnl_dereference(tp->root); struct flow_head *head = rtnl_dereference(tp->root);
struct flow_filter *f = (struct flow_filter *)arg; struct flow_filter *f = arg;
list_del_rcu(&f->list); list_del_rcu(&f->list);
call_rcu(&f->rcu, flow_destroy_filter); call_rcu(&f->rcu, flow_destroy_filter);
...@@ -586,21 +586,21 @@ static void flow_destroy(struct tcf_proto *tp) ...@@ -586,21 +586,21 @@ static void flow_destroy(struct tcf_proto *tp)
kfree_rcu(head, rcu); kfree_rcu(head, rcu);
} }
static unsigned long flow_get(struct tcf_proto *tp, u32 handle) static void *flow_get(struct tcf_proto *tp, u32 handle)
{ {
struct flow_head *head = rtnl_dereference(tp->root); struct flow_head *head = rtnl_dereference(tp->root);
struct flow_filter *f; struct flow_filter *f;
list_for_each_entry(f, &head->filters, list) list_for_each_entry(f, &head->filters, list)
if (f->handle == handle) if (f->handle == handle)
return (unsigned long)f; return f;
return 0; return NULL;
} }
static int flow_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int flow_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct flow_filter *f = (struct flow_filter *)fh; struct flow_filter *f = fh;
struct nlattr *nest; struct nlattr *nest;
if (f == NULL) if (f == NULL)
...@@ -666,7 +666,7 @@ static void flow_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -666,7 +666,7 @@ static void flow_walk(struct tcf_proto *tp, struct tcf_walker *arg)
list_for_each_entry(f, &head->filters, list) { list_for_each_entry(f, &head->filters, list) {
if (arg->count < arg->skip) if (arg->count < arg->skip)
goto skip; goto skip;
if (arg->fn(tp, (unsigned long)f, arg) < 0) { if (arg->fn(tp, f, arg) < 0) {
arg->stop = 1; arg->stop = 1;
break; break;
} }
......
...@@ -332,15 +332,15 @@ static void fl_destroy(struct tcf_proto *tp) ...@@ -332,15 +332,15 @@ static void fl_destroy(struct tcf_proto *tp)
call_rcu(&head->rcu, fl_destroy_rcu); call_rcu(&head->rcu, fl_destroy_rcu);
} }
static unsigned long fl_get(struct tcf_proto *tp, u32 handle) static void *fl_get(struct tcf_proto *tp, u32 handle)
{ {
struct cls_fl_head *head = rtnl_dereference(tp->root); struct cls_fl_head *head = rtnl_dereference(tp->root);
struct cls_fl_filter *f; struct cls_fl_filter *f;
list_for_each_entry(f, &head->filters, list) list_for_each_entry(f, &head->filters, list)
if (f->handle == handle) if (f->handle == handle)
return (unsigned long) f; return f;
return 0; return NULL;
} }
static const struct nla_policy fl_policy[TCA_FLOWER_MAX + 1] = { static const struct nla_policy fl_policy[TCA_FLOWER_MAX + 1] = {
...@@ -883,10 +883,10 @@ static u32 fl_grab_new_handle(struct tcf_proto *tp, ...@@ -883,10 +883,10 @@ static u32 fl_grab_new_handle(struct tcf_proto *tp,
static int fl_change(struct net *net, struct sk_buff *in_skb, static int fl_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, struct tcf_proto *tp, unsigned long base,
u32 handle, struct nlattr **tca, u32 handle, struct nlattr **tca,
unsigned long *arg, bool ovr) void **arg, bool ovr)
{ {
struct cls_fl_head *head = rtnl_dereference(tp->root); struct cls_fl_head *head = rtnl_dereference(tp->root);
struct cls_fl_filter *fold = (struct cls_fl_filter *) *arg; struct cls_fl_filter *fold = *arg;
struct cls_fl_filter *fnew; struct cls_fl_filter *fnew;
struct nlattr **tb; struct nlattr **tb;
struct fl_flow_mask mask = {}; struct fl_flow_mask mask = {};
...@@ -977,7 +977,7 @@ static int fl_change(struct net *net, struct sk_buff *in_skb, ...@@ -977,7 +977,7 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
fl_hw_destroy_filter(tp, fold); fl_hw_destroy_filter(tp, fold);
} }
*arg = (unsigned long) fnew; *arg = fnew;
if (fold) { if (fold) {
list_replace_rcu(&fold->list, &fnew->list); list_replace_rcu(&fold->list, &fnew->list);
...@@ -998,10 +998,10 @@ static int fl_change(struct net *net, struct sk_buff *in_skb, ...@@ -998,10 +998,10 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
return err; return err;
} }
static int fl_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int fl_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
struct cls_fl_head *head = rtnl_dereference(tp->root); struct cls_fl_head *head = rtnl_dereference(tp->root);
struct cls_fl_filter *f = (struct cls_fl_filter *) arg; struct cls_fl_filter *f = arg;
if (!tc_skip_sw(f->flags)) if (!tc_skip_sw(f->flags))
rhashtable_remove_fast(&head->ht, &f->ht_node, rhashtable_remove_fast(&head->ht, &f->ht_node,
...@@ -1019,7 +1019,7 @@ static void fl_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -1019,7 +1019,7 @@ static void fl_walk(struct tcf_proto *tp, struct tcf_walker *arg)
list_for_each_entry_rcu(f, &head->filters, list) { list_for_each_entry_rcu(f, &head->filters, list) {
if (arg->count < arg->skip) if (arg->count < arg->skip)
goto skip; goto skip;
if (arg->fn(tp, (unsigned long) f, arg) < 0) { if (arg->fn(tp, f, arg) < 0) {
arg->stop = 1; arg->stop = 1;
break; break;
} }
...@@ -1154,11 +1154,11 @@ static int fl_dump_key_flags(struct sk_buff *skb, u32 flags_key, u32 flags_mask) ...@@ -1154,11 +1154,11 @@ static int fl_dump_key_flags(struct sk_buff *skb, u32 flags_key, u32 flags_mask)
return nla_put(skb, TCA_FLOWER_KEY_FLAGS_MASK, 4, &_mask); return nla_put(skb, TCA_FLOWER_KEY_FLAGS_MASK, 4, &_mask);
} }
static int fl_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int fl_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct cls_fl_head *head = rtnl_dereference(tp->root); struct cls_fl_head *head = rtnl_dereference(tp->root);
struct cls_fl_filter *f = (struct cls_fl_filter *) fh; struct cls_fl_filter *f = fh;
struct nlattr *nest; struct nlattr *nest;
struct fl_flow_key *key, *mask; struct fl_flow_key *key, *mask;
......
...@@ -95,20 +95,20 @@ static int fw_classify(struct sk_buff *skb, const struct tcf_proto *tp, ...@@ -95,20 +95,20 @@ static int fw_classify(struct sk_buff *skb, const struct tcf_proto *tp,
return -1; return -1;
} }
static unsigned long fw_get(struct tcf_proto *tp, u32 handle) static void *fw_get(struct tcf_proto *tp, u32 handle)
{ {
struct fw_head *head = rtnl_dereference(tp->root); struct fw_head *head = rtnl_dereference(tp->root);
struct fw_filter *f; struct fw_filter *f;
if (head == NULL) if (head == NULL)
return 0; return NULL;
f = rtnl_dereference(head->ht[fw_hash(handle)]); f = rtnl_dereference(head->ht[fw_hash(handle)]);
for (; f; f = rtnl_dereference(f->next)) { for (; f; f = rtnl_dereference(f->next)) {
if (f->id == handle) if (f->id == handle)
return (unsigned long)f; return f;
} }
return 0; return NULL;
} }
static int fw_init(struct tcf_proto *tp) static int fw_init(struct tcf_proto *tp)
...@@ -147,10 +147,10 @@ static void fw_destroy(struct tcf_proto *tp) ...@@ -147,10 +147,10 @@ static void fw_destroy(struct tcf_proto *tp)
kfree_rcu(head, rcu); kfree_rcu(head, rcu);
} }
static int fw_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int fw_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
struct fw_head *head = rtnl_dereference(tp->root); struct fw_head *head = rtnl_dereference(tp->root);
struct fw_filter *f = (struct fw_filter *)arg; struct fw_filter *f = arg;
struct fw_filter __rcu **fp; struct fw_filter __rcu **fp;
struct fw_filter *pfp; struct fw_filter *pfp;
int ret = -EINVAL; int ret = -EINVAL;
...@@ -230,11 +230,11 @@ static int fw_set_parms(struct net *net, struct tcf_proto *tp, ...@@ -230,11 +230,11 @@ static int fw_set_parms(struct net *net, struct tcf_proto *tp,
static int fw_change(struct net *net, struct sk_buff *in_skb, static int fw_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, struct tcf_proto *tp, unsigned long base,
u32 handle, struct nlattr **tca, unsigned long *arg, u32 handle, struct nlattr **tca, void **arg,
bool ovr) bool ovr)
{ {
struct fw_head *head = rtnl_dereference(tp->root); struct fw_head *head = rtnl_dereference(tp->root);
struct fw_filter *f = (struct fw_filter *) *arg; struct fw_filter *f = *arg;
struct nlattr *opt = tca[TCA_OPTIONS]; struct nlattr *opt = tca[TCA_OPTIONS];
struct nlattr *tb[TCA_FW_MAX + 1]; struct nlattr *tb[TCA_FW_MAX + 1];
int err; int err;
...@@ -288,7 +288,7 @@ static int fw_change(struct net *net, struct sk_buff *in_skb, ...@@ -288,7 +288,7 @@ static int fw_change(struct net *net, struct sk_buff *in_skb,
tcf_unbind_filter(tp, &f->res); tcf_unbind_filter(tp, &f->res);
call_rcu(&f->rcu, fw_delete_filter); call_rcu(&f->rcu, fw_delete_filter);
*arg = (unsigned long)fnew; *arg = fnew;
return err; return err;
} }
...@@ -325,7 +325,7 @@ static int fw_change(struct net *net, struct sk_buff *in_skb, ...@@ -325,7 +325,7 @@ static int fw_change(struct net *net, struct sk_buff *in_skb,
RCU_INIT_POINTER(f->next, head->ht[fw_hash(handle)]); RCU_INIT_POINTER(f->next, head->ht[fw_hash(handle)]);
rcu_assign_pointer(head->ht[fw_hash(handle)], f); rcu_assign_pointer(head->ht[fw_hash(handle)], f);
*arg = (unsigned long)f; *arg = f;
return 0; return 0;
errout: errout:
...@@ -354,7 +354,7 @@ static void fw_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -354,7 +354,7 @@ static void fw_walk(struct tcf_proto *tp, struct tcf_walker *arg)
arg->count++; arg->count++;
continue; continue;
} }
if (arg->fn(tp, (unsigned long)f, arg) < 0) { if (arg->fn(tp, f, arg) < 0) {
arg->stop = 1; arg->stop = 1;
return; return;
} }
...@@ -363,11 +363,11 @@ static void fw_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -363,11 +363,11 @@ static void fw_walk(struct tcf_proto *tp, struct tcf_walker *arg)
} }
} }
static int fw_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int fw_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct fw_head *head = rtnl_dereference(tp->root); struct fw_head *head = rtnl_dereference(tp->root);
struct fw_filter *f = (struct fw_filter *)fh; struct fw_filter *f = fh;
struct nlattr *nest; struct nlattr *nest;
if (f == NULL) if (f == NULL)
......
...@@ -98,9 +98,9 @@ static void mall_destroy(struct tcf_proto *tp) ...@@ -98,9 +98,9 @@ static void mall_destroy(struct tcf_proto *tp)
call_rcu(&head->rcu, mall_destroy_rcu); call_rcu(&head->rcu, mall_destroy_rcu);
} }
static unsigned long mall_get(struct tcf_proto *tp, u32 handle) static void *mall_get(struct tcf_proto *tp, u32 handle)
{ {
return 0UL; return NULL;
} }
static const struct nla_policy mall_policy[TCA_MATCHALL_MAX + 1] = { static const struct nla_policy mall_policy[TCA_MATCHALL_MAX + 1] = {
...@@ -129,7 +129,7 @@ static int mall_set_parms(struct net *net, struct tcf_proto *tp, ...@@ -129,7 +129,7 @@ static int mall_set_parms(struct net *net, struct tcf_proto *tp,
static int mall_change(struct net *net, struct sk_buff *in_skb, static int mall_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, struct tcf_proto *tp, unsigned long base,
u32 handle, struct nlattr **tca, u32 handle, struct nlattr **tca,
unsigned long *arg, bool ovr) void **arg, bool ovr)
{ {
struct cls_mall_head *head = rtnl_dereference(tp->root); struct cls_mall_head *head = rtnl_dereference(tp->root);
struct net_device *dev = tp->q->dev_queue->dev; struct net_device *dev = tp->q->dev_queue->dev;
...@@ -185,7 +185,7 @@ static int mall_change(struct net *net, struct sk_buff *in_skb, ...@@ -185,7 +185,7 @@ static int mall_change(struct net *net, struct sk_buff *in_skb,
if (!tc_in_hw(new->flags)) if (!tc_in_hw(new->flags))
new->flags |= TCA_CLS_FLAGS_NOT_IN_HW; new->flags |= TCA_CLS_FLAGS_NOT_IN_HW;
*arg = (unsigned long) head; *arg = head;
rcu_assign_pointer(tp->root, new); rcu_assign_pointer(tp->root, new);
return 0; return 0;
...@@ -197,7 +197,7 @@ static int mall_change(struct net *net, struct sk_buff *in_skb, ...@@ -197,7 +197,7 @@ static int mall_change(struct net *net, struct sk_buff *in_skb,
return err; return err;
} }
static int mall_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int mall_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
...@@ -208,16 +208,16 @@ static void mall_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -208,16 +208,16 @@ static void mall_walk(struct tcf_proto *tp, struct tcf_walker *arg)
if (arg->count < arg->skip) if (arg->count < arg->skip)
goto skip; goto skip;
if (arg->fn(tp, (unsigned long) head, arg) < 0) if (arg->fn(tp, head, arg) < 0)
arg->stop = 1; arg->stop = 1;
skip: skip:
arg->count++; arg->count++;
} }
static int mall_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int mall_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct cls_mall_head *head = (struct cls_mall_head *) fh; struct cls_mall_head *head = fh;
struct nlattr *nest; struct nlattr *nest;
if (!head) if (!head)
......
...@@ -216,7 +216,7 @@ static inline u32 from_hash(u32 id) ...@@ -216,7 +216,7 @@ static inline u32 from_hash(u32 id)
return 16 + (id & 0xF); return 16 + (id & 0xF);
} }
static unsigned long route4_get(struct tcf_proto *tp, u32 handle) static void *route4_get(struct tcf_proto *tp, u32 handle)
{ {
struct route4_head *head = rtnl_dereference(tp->root); struct route4_head *head = rtnl_dereference(tp->root);
struct route4_bucket *b; struct route4_bucket *b;
...@@ -225,11 +225,11 @@ static unsigned long route4_get(struct tcf_proto *tp, u32 handle) ...@@ -225,11 +225,11 @@ static unsigned long route4_get(struct tcf_proto *tp, u32 handle)
h1 = to_hash(handle); h1 = to_hash(handle);
if (h1 > 256) if (h1 > 256)
return 0; return NULL;
h2 = from_hash(handle >> 16); h2 = from_hash(handle >> 16);
if (h2 > 32) if (h2 > 32)
return 0; return NULL;
b = rtnl_dereference(head->table[h1]); b = rtnl_dereference(head->table[h1]);
if (b) { if (b) {
...@@ -237,9 +237,9 @@ static unsigned long route4_get(struct tcf_proto *tp, u32 handle) ...@@ -237,9 +237,9 @@ static unsigned long route4_get(struct tcf_proto *tp, u32 handle)
f; f;
f = rtnl_dereference(f->next)) f = rtnl_dereference(f->next))
if (f->handle == handle) if (f->handle == handle)
return (unsigned long)f; return f;
} }
return 0; return NULL;
} }
static int route4_init(struct tcf_proto *tp) static int route4_init(struct tcf_proto *tp)
...@@ -294,10 +294,10 @@ static void route4_destroy(struct tcf_proto *tp) ...@@ -294,10 +294,10 @@ static void route4_destroy(struct tcf_proto *tp)
kfree_rcu(head, rcu); kfree_rcu(head, rcu);
} }
static int route4_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int route4_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
struct route4_head *head = rtnl_dereference(tp->root); struct route4_head *head = rtnl_dereference(tp->root);
struct route4_filter *f = (struct route4_filter *)arg; struct route4_filter *f = arg;
struct route4_filter __rcu **fp; struct route4_filter __rcu **fp;
struct route4_filter *nf; struct route4_filter *nf;
struct route4_bucket *b; struct route4_bucket *b;
...@@ -448,7 +448,7 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp, ...@@ -448,7 +448,7 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,
static int route4_change(struct net *net, struct sk_buff *in_skb, static int route4_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, u32 handle, struct tcf_proto *tp, unsigned long base, u32 handle,
struct nlattr **tca, unsigned long *arg, bool ovr) struct nlattr **tca, void **arg, bool ovr)
{ {
struct route4_head *head = rtnl_dereference(tp->root); struct route4_head *head = rtnl_dereference(tp->root);
struct route4_filter __rcu **fp; struct route4_filter __rcu **fp;
...@@ -467,7 +467,7 @@ static int route4_change(struct net *net, struct sk_buff *in_skb, ...@@ -467,7 +467,7 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
if (err < 0) if (err < 0)
return err; return err;
fold = (struct route4_filter *)*arg; fold = *arg;
if (fold && handle && fold->handle != handle) if (fold && handle && fold->handle != handle)
return -EINVAL; return -EINVAL;
...@@ -525,7 +525,7 @@ static int route4_change(struct net *net, struct sk_buff *in_skb, ...@@ -525,7 +525,7 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
} }
route4_reset_fastmap(head); route4_reset_fastmap(head);
*arg = (unsigned long)f; *arg = f;
if (fold) { if (fold) {
tcf_unbind_filter(tp, &fold->res); tcf_unbind_filter(tp, &fold->res);
call_rcu(&fold->rcu, route4_delete_filter); call_rcu(&fold->rcu, route4_delete_filter);
...@@ -564,7 +564,7 @@ static void route4_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -564,7 +564,7 @@ static void route4_walk(struct tcf_proto *tp, struct tcf_walker *arg)
arg->count++; arg->count++;
continue; continue;
} }
if (arg->fn(tp, (unsigned long)f, arg) < 0) { if (arg->fn(tp, f, arg) < 0) {
arg->stop = 1; arg->stop = 1;
return; return;
} }
...@@ -575,10 +575,10 @@ static void route4_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -575,10 +575,10 @@ static void route4_walk(struct tcf_proto *tp, struct tcf_walker *arg)
} }
} }
static int route4_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int route4_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct route4_filter *f = (struct route4_filter *)fh; struct route4_filter *f = fh;
struct nlattr *nest; struct nlattr *nest;
u32 id; u32 id;
......
...@@ -248,7 +248,7 @@ static void rsvp_replace(struct tcf_proto *tp, struct rsvp_filter *n, u32 h) ...@@ -248,7 +248,7 @@ static void rsvp_replace(struct tcf_proto *tp, struct rsvp_filter *n, u32 h)
BUG_ON(1); BUG_ON(1);
} }
static unsigned long rsvp_get(struct tcf_proto *tp, u32 handle) static void *rsvp_get(struct tcf_proto *tp, u32 handle)
{ {
struct rsvp_head *head = rtnl_dereference(tp->root); struct rsvp_head *head = rtnl_dereference(tp->root);
struct rsvp_session *s; struct rsvp_session *s;
...@@ -257,17 +257,17 @@ static unsigned long rsvp_get(struct tcf_proto *tp, u32 handle) ...@@ -257,17 +257,17 @@ static unsigned long rsvp_get(struct tcf_proto *tp, u32 handle)
unsigned int h2 = (handle >> 8) & 0xFF; unsigned int h2 = (handle >> 8) & 0xFF;
if (h2 > 16) if (h2 > 16)
return 0; return NULL;
for (s = rtnl_dereference(head->ht[h1]); s; for (s = rtnl_dereference(head->ht[h1]); s;
s = rtnl_dereference(s->next)) { s = rtnl_dereference(s->next)) {
for (f = rtnl_dereference(s->ht[h2]); f; for (f = rtnl_dereference(s->ht[h2]); f;
f = rtnl_dereference(f->next)) { f = rtnl_dereference(f->next)) {
if (f->handle == handle) if (f->handle == handle)
return (unsigned long)f; return f;
} }
} }
return 0; return NULL;
} }
static int rsvp_init(struct tcf_proto *tp) static int rsvp_init(struct tcf_proto *tp)
...@@ -328,10 +328,10 @@ static void rsvp_destroy(struct tcf_proto *tp) ...@@ -328,10 +328,10 @@ static void rsvp_destroy(struct tcf_proto *tp)
kfree_rcu(data, rcu); kfree_rcu(data, rcu);
} }
static int rsvp_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int rsvp_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
struct rsvp_head *head = rtnl_dereference(tp->root); struct rsvp_head *head = rtnl_dereference(tp->root);
struct rsvp_filter *nfp, *f = (struct rsvp_filter *)arg; struct rsvp_filter *nfp, *f = arg;
struct rsvp_filter __rcu **fp; struct rsvp_filter __rcu **fp;
unsigned int h = f->handle; unsigned int h = f->handle;
struct rsvp_session __rcu **sp; struct rsvp_session __rcu **sp;
...@@ -464,7 +464,7 @@ static int rsvp_change(struct net *net, struct sk_buff *in_skb, ...@@ -464,7 +464,7 @@ static int rsvp_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, struct tcf_proto *tp, unsigned long base,
u32 handle, u32 handle,
struct nlattr **tca, struct nlattr **tca,
unsigned long *arg, bool ovr) void **arg, bool ovr)
{ {
struct rsvp_head *data = rtnl_dereference(tp->root); struct rsvp_head *data = rtnl_dereference(tp->root);
struct rsvp_filter *f, *nfp; struct rsvp_filter *f, *nfp;
...@@ -493,7 +493,7 @@ static int rsvp_change(struct net *net, struct sk_buff *in_skb, ...@@ -493,7 +493,7 @@ static int rsvp_change(struct net *net, struct sk_buff *in_skb,
if (err < 0) if (err < 0)
goto errout2; goto errout2;
f = (struct rsvp_filter *)*arg; f = *arg;
if (f) { if (f) {
/* Node exists: adjust only classid */ /* Node exists: adjust only classid */
struct rsvp_filter *n; struct rsvp_filter *n;
...@@ -604,7 +604,7 @@ static int rsvp_change(struct net *net, struct sk_buff *in_skb, ...@@ -604,7 +604,7 @@ static int rsvp_change(struct net *net, struct sk_buff *in_skb,
RCU_INIT_POINTER(f->next, nfp); RCU_INIT_POINTER(f->next, nfp);
rcu_assign_pointer(*fp, f); rcu_assign_pointer(*fp, f);
*arg = (unsigned long)f; *arg = f;
return 0; return 0;
} }
} }
...@@ -663,7 +663,7 @@ static void rsvp_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -663,7 +663,7 @@ static void rsvp_walk(struct tcf_proto *tp, struct tcf_walker *arg)
arg->count++; arg->count++;
continue; continue;
} }
if (arg->fn(tp, (unsigned long)f, arg) < 0) { if (arg->fn(tp, f, arg) < 0) {
arg->stop = 1; arg->stop = 1;
return; return;
} }
...@@ -674,10 +674,10 @@ static void rsvp_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -674,10 +674,10 @@ static void rsvp_walk(struct tcf_proto *tp, struct tcf_walker *arg)
} }
} }
static int rsvp_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int rsvp_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct rsvp_filter *f = (struct rsvp_filter *)fh; struct rsvp_filter *f = fh;
struct rsvp_session *s; struct rsvp_session *s;
struct nlattr *nest; struct nlattr *nest;
struct tc_rsvp_pinfo pinfo; struct tc_rsvp_pinfo pinfo;
......
...@@ -104,16 +104,16 @@ static int tcindex_classify(struct sk_buff *skb, const struct tcf_proto *tp, ...@@ -104,16 +104,16 @@ static int tcindex_classify(struct sk_buff *skb, const struct tcf_proto *tp,
} }
static unsigned long tcindex_get(struct tcf_proto *tp, u32 handle) static void *tcindex_get(struct tcf_proto *tp, u32 handle)
{ {
struct tcindex_data *p = rtnl_dereference(tp->root); struct tcindex_data *p = rtnl_dereference(tp->root);
struct tcindex_filter_result *r; struct tcindex_filter_result *r;
pr_debug("tcindex_get(tp %p,handle 0x%08x)\n", tp, handle); pr_debug("tcindex_get(tp %p,handle 0x%08x)\n", tp, handle);
if (p->perfect && handle >= p->alloc_hash) if (p->perfect && handle >= p->alloc_hash)
return 0; return NULL;
r = tcindex_lookup(p, handle); r = tcindex_lookup(p, handle);
return r && tcindex_filter_is_set(r) ? (unsigned long) r : 0UL; return r && tcindex_filter_is_set(r) ? r : NULL;
} }
static int tcindex_init(struct tcf_proto *tp) static int tcindex_init(struct tcf_proto *tp)
...@@ -150,14 +150,14 @@ static void tcindex_destroy_fexts(struct rcu_head *head) ...@@ -150,14 +150,14 @@ static void tcindex_destroy_fexts(struct rcu_head *head)
kfree(f); kfree(f);
} }
static int tcindex_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int tcindex_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
struct tcindex_data *p = rtnl_dereference(tp->root); struct tcindex_data *p = rtnl_dereference(tp->root);
struct tcindex_filter_result *r = (struct tcindex_filter_result *) arg; struct tcindex_filter_result *r = arg;
struct tcindex_filter __rcu **walk; struct tcindex_filter __rcu **walk;
struct tcindex_filter *f = NULL; struct tcindex_filter *f = NULL;
pr_debug("tcindex_delete(tp %p,arg 0x%lx),p %p\n", tp, arg, p); pr_debug("tcindex_delete(tp %p,arg %p),p %p\n", tp, arg, p);
if (p->perfect) { if (p->perfect) {
if (!r->res.class) if (!r->res.class)
return -ENOENT; return -ENOENT;
...@@ -192,8 +192,7 @@ static int tcindex_delete(struct tcf_proto *tp, unsigned long arg, bool *last) ...@@ -192,8 +192,7 @@ static int tcindex_delete(struct tcf_proto *tp, unsigned long arg, bool *last)
} }
static int tcindex_destroy_element(struct tcf_proto *tp, static int tcindex_destroy_element(struct tcf_proto *tp,
unsigned long arg, void *arg, struct tcf_walker *walker)
struct tcf_walker *walker)
{ {
bool last; bool last;
...@@ -471,17 +470,17 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, ...@@ -471,17 +470,17 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
static int static int
tcindex_change(struct net *net, struct sk_buff *in_skb, tcindex_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, u32 handle, struct tcf_proto *tp, unsigned long base, u32 handle,
struct nlattr **tca, unsigned long *arg, bool ovr) struct nlattr **tca, void **arg, bool ovr)
{ {
struct nlattr *opt = tca[TCA_OPTIONS]; struct nlattr *opt = tca[TCA_OPTIONS];
struct nlattr *tb[TCA_TCINDEX_MAX + 1]; struct nlattr *tb[TCA_TCINDEX_MAX + 1];
struct tcindex_data *p = rtnl_dereference(tp->root); struct tcindex_data *p = rtnl_dereference(tp->root);
struct tcindex_filter_result *r = (struct tcindex_filter_result *) *arg; struct tcindex_filter_result *r = *arg;
int err; int err;
pr_debug("tcindex_change(tp %p,handle 0x%08x,tca %p,arg %p),opt %p," pr_debug("tcindex_change(tp %p,handle 0x%08x,tca %p,arg %p),opt %p,"
"p %p,r %p,*arg 0x%lx\n", "p %p,r %p,*arg %p\n",
tp, handle, tca, arg, opt, p, r, arg ? *arg : 0L); tp, handle, tca, arg, opt, p, r, arg ? *arg : NULL);
if (!opt) if (!opt)
return 0; return 0;
...@@ -506,9 +505,7 @@ static void tcindex_walk(struct tcf_proto *tp, struct tcf_walker *walker) ...@@ -506,9 +505,7 @@ static void tcindex_walk(struct tcf_proto *tp, struct tcf_walker *walker)
if (!p->perfect[i].res.class) if (!p->perfect[i].res.class)
continue; continue;
if (walker->count >= walker->skip) { if (walker->count >= walker->skip) {
if (walker->fn(tp, if (walker->fn(tp, p->perfect + i, walker) < 0) {
(unsigned long) (p->perfect+i), walker)
< 0) {
walker->stop = 1; walker->stop = 1;
return; return;
} }
...@@ -522,8 +519,7 @@ static void tcindex_walk(struct tcf_proto *tp, struct tcf_walker *walker) ...@@ -522,8 +519,7 @@ static void tcindex_walk(struct tcf_proto *tp, struct tcf_walker *walker)
for (f = rtnl_dereference(p->h[i]); f; f = next) { for (f = rtnl_dereference(p->h[i]); f; f = next) {
next = rtnl_dereference(f->next); next = rtnl_dereference(f->next);
if (walker->count >= walker->skip) { if (walker->count >= walker->skip) {
if (walker->fn(tp, (unsigned long) &f->result, if (walker->fn(tp, &f->result, walker) < 0) {
walker) < 0) {
walker->stop = 1; walker->stop = 1;
return; return;
} }
...@@ -548,14 +544,14 @@ static void tcindex_destroy(struct tcf_proto *tp) ...@@ -548,14 +544,14 @@ static void tcindex_destroy(struct tcf_proto *tp)
} }
static int tcindex_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int tcindex_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct tcindex_data *p = rtnl_dereference(tp->root); struct tcindex_data *p = rtnl_dereference(tp->root);
struct tcindex_filter_result *r = (struct tcindex_filter_result *) fh; struct tcindex_filter_result *r = fh;
struct nlattr *nest; struct nlattr *nest;
pr_debug("tcindex_dump(tp %p,fh 0x%lx,skb %p,t %p),p %p,r %p\n", pr_debug("tcindex_dump(tp %p,fh %p,skb %p,t %p),p %p,r %p\n",
tp, fh, skb, t, p, r); tp, fh, skb, t, p, r);
pr_debug("p->perfect %p p->h %p\n", p->perfect, p->h); pr_debug("p->perfect %p p->h %p\n", p->perfect, p->h);
......
...@@ -289,7 +289,7 @@ static struct tc_u_knode *u32_lookup_key(struct tc_u_hnode *ht, u32 handle) ...@@ -289,7 +289,7 @@ static struct tc_u_knode *u32_lookup_key(struct tc_u_hnode *ht, u32 handle)
} }
static unsigned long u32_get(struct tcf_proto *tp, u32 handle) static void *u32_get(struct tcf_proto *tp, u32 handle)
{ {
struct tc_u_hnode *ht; struct tc_u_hnode *ht;
struct tc_u_common *tp_c = tp->data; struct tc_u_common *tp_c = tp->data;
...@@ -300,12 +300,12 @@ static unsigned long u32_get(struct tcf_proto *tp, u32 handle) ...@@ -300,12 +300,12 @@ static unsigned long u32_get(struct tcf_proto *tp, u32 handle)
ht = u32_lookup_ht(tp_c, TC_U32_HTID(handle)); ht = u32_lookup_ht(tp_c, TC_U32_HTID(handle));
if (!ht) if (!ht)
return 0; return NULL;
if (TC_U32_KEY(handle) == 0) if (TC_U32_KEY(handle) == 0)
return (unsigned long)ht; return ht;
return (unsigned long)u32_lookup_key(ht, handle); return u32_lookup_key(ht, handle);
} }
static u32 gen_new_htid(struct tc_u_common *tp_c) static u32 gen_new_htid(struct tc_u_common *tp_c)
...@@ -605,9 +605,9 @@ static void u32_destroy(struct tcf_proto *tp) ...@@ -605,9 +605,9 @@ static void u32_destroy(struct tcf_proto *tp)
tp->data = NULL; tp->data = NULL;
} }
static int u32_delete(struct tcf_proto *tp, unsigned long arg, bool *last) static int u32_delete(struct tcf_proto *tp, void *arg, bool *last)
{ {
struct tc_u_hnode *ht = (struct tc_u_hnode *)arg; struct tc_u_hnode *ht = arg;
struct tc_u_hnode *root_ht = rtnl_dereference(tp->root); struct tc_u_hnode *root_ht = rtnl_dereference(tp->root);
struct tc_u_common *tp_c = tp->data; struct tc_u_common *tp_c = tp->data;
int ret = 0; int ret = 0;
...@@ -831,7 +831,7 @@ static struct tc_u_knode *u32_init_knode(struct tcf_proto *tp, ...@@ -831,7 +831,7 @@ static struct tc_u_knode *u32_init_knode(struct tcf_proto *tp,
static int u32_change(struct net *net, struct sk_buff *in_skb, static int u32_change(struct net *net, struct sk_buff *in_skb,
struct tcf_proto *tp, unsigned long base, u32 handle, struct tcf_proto *tp, unsigned long base, u32 handle,
struct nlattr **tca, unsigned long *arg, bool ovr) struct nlattr **tca, void **arg, bool ovr)
{ {
struct tc_u_common *tp_c = tp->data; struct tc_u_common *tp_c = tp->data;
struct tc_u_hnode *ht; struct tc_u_hnode *ht;
...@@ -858,7 +858,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, ...@@ -858,7 +858,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
return -EINVAL; return -EINVAL;
} }
n = (struct tc_u_knode *)*arg; n = *arg;
if (n) { if (n) {
struct tc_u_knode *new; struct tc_u_knode *new;
...@@ -925,7 +925,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, ...@@ -925,7 +925,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
RCU_INIT_POINTER(ht->next, tp_c->hlist); RCU_INIT_POINTER(ht->next, tp_c->hlist);
rcu_assign_pointer(tp_c->hlist, ht); rcu_assign_pointer(tp_c->hlist, ht);
*arg = (unsigned long)ht; *arg = ht;
return 0; return 0;
} }
...@@ -1020,7 +1020,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, ...@@ -1020,7 +1020,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
RCU_INIT_POINTER(n->next, pins); RCU_INIT_POINTER(n->next, pins);
rcu_assign_pointer(*ins, n); rcu_assign_pointer(*ins, n);
*arg = (unsigned long)n; *arg = n;
return 0; return 0;
} }
...@@ -1054,7 +1054,7 @@ static void u32_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -1054,7 +1054,7 @@ static void u32_walk(struct tcf_proto *tp, struct tcf_walker *arg)
if (ht->prio != tp->prio) if (ht->prio != tp->prio)
continue; continue;
if (arg->count >= arg->skip) { if (arg->count >= arg->skip) {
if (arg->fn(tp, (unsigned long)ht, arg) < 0) { if (arg->fn(tp, ht, arg) < 0) {
arg->stop = 1; arg->stop = 1;
return; return;
} }
...@@ -1068,7 +1068,7 @@ static void u32_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -1068,7 +1068,7 @@ static void u32_walk(struct tcf_proto *tp, struct tcf_walker *arg)
arg->count++; arg->count++;
continue; continue;
} }
if (arg->fn(tp, (unsigned long)n, arg) < 0) { if (arg->fn(tp, n, arg) < 0) {
arg->stop = 1; arg->stop = 1;
return; return;
} }
...@@ -1078,10 +1078,10 @@ static void u32_walk(struct tcf_proto *tp, struct tcf_walker *arg) ...@@ -1078,10 +1078,10 @@ static void u32_walk(struct tcf_proto *tp, struct tcf_walker *arg)
} }
} }
static int u32_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, static int u32_dump(struct net *net, struct tcf_proto *tp, void *fh,
struct sk_buff *skb, struct tcmsg *t) struct sk_buff *skb, struct tcmsg *t)
{ {
struct tc_u_knode *n = (struct tc_u_knode *)fh; struct tc_u_knode *n = fh;
struct tc_u_hnode *ht_up, *ht_down; struct tc_u_hnode *ht_up, *ht_down;
struct nlattr *nest; struct nlattr *nest;
...@@ -1095,7 +1095,7 @@ static int u32_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, ...@@ -1095,7 +1095,7 @@ static int u32_dump(struct net *net, struct tcf_proto *tp, unsigned long fh,
goto nla_put_failure; goto nla_put_failure;
if (TC_U32_KEY(n->handle) == 0) { if (TC_U32_KEY(n->handle) == 0) {
struct tc_u_hnode *ht = (struct tc_u_hnode *)fh; struct tc_u_hnode *ht = fh;
u32 divisor = ht->divisor + 1; u32 divisor = ht->divisor + 1;
if (nla_put_u32(skb, TCA_U32_DIVISOR, divisor)) if (nla_put_u32(skb, TCA_U32_DIVISOR, divisor))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment