net: sched: make tc_action_ops->get_dev return dev and avoid passing net
authorJiri Pirko <jiri@mellanox.com>
Wed, 11 Oct 2017 07:41:07 +0000 (09:41 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Oct 2017 03:15:42 +0000 (20:15 -0700)
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>
include/net/act_api.h
include/net/tc_act/tc_mirred.h
net/sched/act_mirred.c
net/sched/cls_api.c

index b944e0eb93be367944673939a943b05c3473f2e9..900168a9901e037ecb4e5743c47c63357470ed3d 100644 (file)
@@ -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 {
index 604bc31e23ab1ebc20ddaaa8fa7a94aaf1857281..21a656569840d06ee4c16267d1c34a12c3ade7d9 100644 (file)
@@ -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)
index 416627c66f081f26ff9284de86411c3e05390b8e..8b3e593884803370ea27ef5fe770fa5ae829a888 100644 (file)
@@ -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);
@@ -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 = {
@@ -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)
index 0b2219adf520b33a471dd3b8e2fdf9f46271c3f9..450873b0c4b956e345f129bc616afd64869d58ad 100644 (file)
@@ -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;