net/sched: act_mirred: Add helper function tcf_mirred_replace_dev
authorVictor Nogueira <victor@mojatatu.com>
Tue, 19 Dec 2023 18:16:22 +0000 (15:16 -0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Dec 2023 21:20:08 +0000 (21:20 +0000)
The act of replacing a device will be repeated by the init logic for the
block ID in the patch that allows mirred to a block. Therefore we
encapsulate this functionality in a function (tcf_mirred_replace_dev) so
that we can reuse it and avoid code repetition.

Co-developed-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
Co-developed-by: Pedro Tammela <pctammela@mojatatu.com>
Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
Signed-off-by: Victor Nogueira <victor@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/act_mirred.c

index 6f2544c1e3961d32ea697586519340434cd9cf60..a1be8f3c4a8e02a9a66e31e1638f89b6ca7d071f 100644 (file)
@@ -89,6 +89,16 @@ static const struct nla_policy mirred_policy[TCA_MIRRED_MAX + 1] = {
 
 static struct tc_action_ops act_mirred_ops;
 
+static void tcf_mirred_replace_dev(struct tcf_mirred *m,
+                                  struct net_device *ndev)
+{
+       struct net_device *odev;
+
+       odev = rcu_replace_pointer(m->tcfm_dev, ndev,
+                                  lockdep_is_held(&m->tcf_lock));
+       netdev_put(odev, &m->tcfm_dev_tracker);
+}
+
 static int tcf_mirred_init(struct net *net, struct nlattr *nla,
                           struct nlattr *est, struct tc_action **a,
                           struct tcf_proto *tp,
@@ -170,7 +180,7 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla,
        spin_lock_bh(&m->tcf_lock);
 
        if (parm->ifindex) {
-               struct net_device *odev, *ndev;
+               struct net_device *ndev;
 
                ndev = dev_get_by_index(net, parm->ifindex);
                if (!ndev) {
@@ -179,9 +189,7 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla,
                        goto put_chain;
                }
                mac_header_xmit = dev_is_mac_header_xmit(ndev);
-               odev = rcu_replace_pointer(m->tcfm_dev, ndev,
-                                         lockdep_is_held(&m->tcf_lock));
-               netdev_put(odev, &m->tcfm_dev_tracker);
+               tcf_mirred_replace_dev(m, ndev);
                netdev_tracker_alloc(ndev, &m->tcfm_dev_tracker, GFP_ATOMIC);
                m->tcfm_mac_header_xmit = mac_header_xmit;
        }