Skip to content

Commit

Permalink
net: sched: make tc_action_ops->get_dev return dev and avoid passing net
Browse files Browse the repository at this point in the history
Return dev directly, NULL if not possible. That is enough.

Makes no sense to pass struct net * to get_dev op, as there is only one
net possible, the one the action was created in. So just store it in
mirred priv and use directly.

Rename the mirred op callback function.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jiri Pirko authored and David S. Miller committed Oct 12, 2017
1 parent 7c6a86b commit 843e79d
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 14 deletions.
3 changes: 1 addition & 2 deletions include/net/act_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,7 @@ struct tc_action_ops {
int (*walk)(struct net *, struct sk_buff *,
struct netlink_callback *, int, const struct tc_action_ops *);
void (*stats_update)(struct tc_action *, u64, u32, u64);
int (*get_dev)(const struct tc_action *a, struct net *net,
struct net_device **mirred_dev);
struct net_device *(*get_dev)(const struct tc_action *a);
};

struct tc_action_net {
Expand Down
1 change: 1 addition & 0 deletions include/net/tc_act/tc_mirred.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ struct tcf_mirred {
int tcfm_ifindex;
bool tcfm_mac_header_xmit;
struct net_device __rcu *tcfm_dev;
struct net *net;
struct list_head tcfm_list;
};
#define to_mirred(a) ((struct tcf_mirred *)a)
Expand Down
13 changes: 5 additions & 8 deletions net/sched/act_mirred.c
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla,
m->tcfm_eaction = parm->eaction;
if (dev != NULL) {
m->tcfm_ifindex = parm->ifindex;
m->net = net;
if (ret != ACT_P_CREATED)
dev_put(rcu_dereference_protected(m->tcfm_dev, 1));
dev_hold(dev);
Expand Down Expand Up @@ -313,15 +314,11 @@ static struct notifier_block mirred_device_notifier = {
.notifier_call = mirred_device_event,
};

static int tcf_mirred_device(const struct tc_action *a, struct net *net,
struct net_device **mirred_dev)
static struct net_device *tcf_mirred_get_dev(const struct tc_action *a)
{
int ifindex = tcf_mirred_ifindex(a);
struct tcf_mirred *m = to_mirred(a);

*mirred_dev = __dev_get_by_index(net, ifindex);
if (!*mirred_dev)
return -EINVAL;
return 0;
return __dev_get_by_index(m->net, m->tcfm_ifindex);
}

static struct tc_action_ops act_mirred_ops = {
Expand All @@ -336,7 +333,7 @@ static struct tc_action_ops act_mirred_ops = {
.walk = tcf_mirred_walker,
.lookup = tcf_mirred_search,
.size = sizeof(struct tcf_mirred),
.get_dev = tcf_mirred_device,
.get_dev = tcf_mirred_get_dev,
};

static __net_init int mirred_init_net(struct net *net)
Expand Down
6 changes: 2 additions & 4 deletions net/sched/cls_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -1016,10 +1016,8 @@ int tcf_exts_get_dev(struct net_device *dev, struct tcf_exts *exts,

tcf_exts_to_list(exts, &actions);
list_for_each_entry(a, &actions, list) {
if (a->ops->get_dev) {
a->ops->get_dev(a, dev_net(dev), hw_dev);
break;
}
if (a->ops->get_dev)
*hw_dev = a->ops->get_dev(a);
}
if (*hw_dev)
return 0;
Expand Down

0 comments on commit 843e79d

Please sign in to comment.