Commit 843e79d0 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

net: sched: make tc_action_ops->get_dev return dev and avoid passing net



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: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7c6a86b4
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -93,8 +93,7 @@ struct tc_action_ops {
	int     (*walk)(struct net *, struct sk_buff *,
	int     (*walk)(struct net *, struct sk_buff *,
			struct netlink_callback *, int, const struct tc_action_ops *);
			struct netlink_callback *, int, const struct tc_action_ops *);
	void	(*stats_update)(struct tc_action *, u64, u32, u64);
	void	(*stats_update)(struct tc_action *, u64, u32, u64);
	int	(*get_dev)(const struct tc_action *a, struct net *net,
	struct net_device *(*get_dev)(const struct tc_action *a);
			   struct net_device **mirred_dev);
};
};


struct tc_action_net {
struct tc_action_net {
+1 −0
Original line number Original line Diff line number Diff line
@@ -10,6 +10,7 @@ struct tcf_mirred {
	int			tcfm_ifindex;
	int			tcfm_ifindex;
	bool			tcfm_mac_header_xmit;
	bool			tcfm_mac_header_xmit;
	struct net_device __rcu	*tcfm_dev;
	struct net_device __rcu	*tcfm_dev;
	struct net		*net;
	struct list_head	tcfm_list;
	struct list_head	tcfm_list;
};
};
#define to_mirred(a) ((struct tcf_mirred *)a)
#define to_mirred(a) ((struct tcf_mirred *)a)
+5 −8
Original line number Original line Diff line number Diff line
@@ -140,6 +140,7 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla,
	m->tcfm_eaction = parm->eaction;
	m->tcfm_eaction = parm->eaction;
	if (dev != NULL) {
	if (dev != NULL) {
		m->tcfm_ifindex = parm->ifindex;
		m->tcfm_ifindex = parm->ifindex;
		m->net = net;
		if (ret != ACT_P_CREATED)
		if (ret != ACT_P_CREATED)
			dev_put(rcu_dereference_protected(m->tcfm_dev, 1));
			dev_put(rcu_dereference_protected(m->tcfm_dev, 1));
		dev_hold(dev);
		dev_hold(dev);
@@ -313,15 +314,11 @@ static struct notifier_block mirred_device_notifier = {
	.notifier_call = mirred_device_event,
	.notifier_call = mirred_device_event,
};
};


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


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


static struct tc_action_ops act_mirred_ops = {
static struct tc_action_ops act_mirred_ops = {
@@ -336,7 +333,7 @@ static struct tc_action_ops act_mirred_ops = {
	.walk		=	tcf_mirred_walker,
	.walk		=	tcf_mirred_walker,
	.lookup		=	tcf_mirred_search,
	.lookup		=	tcf_mirred_search,
	.size		=	sizeof(struct tcf_mirred),
	.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)
static __net_init int mirred_init_net(struct net *net)
+2 −4
Original line number Original line Diff line number Diff line
@@ -1016,10 +1016,8 @@ int tcf_exts_get_dev(struct net_device *dev, struct tcf_exts *exts,


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