Skip to content

Commit

Permalink
net/sched: act_mirred: Add helper function tcf_mirred_replace_dev
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Victor Nogueira authored and David S. Miller committed Dec 26, 2023
1 parent 16085e4 commit 415e38b
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions net/sched/act_mirred.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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) {
Expand All @@ -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;
}
Expand Down

0 comments on commit 415e38b

Please sign in to comment.