]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - net/sched/act_mirred.c
net sched: actions use tcf_lastuse_update for consistency
[mirror_ubuntu-bionic-kernel.git] / net / sched / act_mirred.c
index 8f3948dd38b85f70e654e317280db09e66c23f5c..d3ac73e90f002bb7a6ab91420f199f6ab095aaa5 100644 (file)
@@ -36,14 +36,15 @@ static DEFINE_SPINLOCK(mirred_list_lock);
 static void tcf_mirred_release(struct tc_action *a, int bind)
 {
        struct tcf_mirred *m = to_mirred(a);
-       struct net_device *dev = rcu_dereference_protected(m->tcfm_dev, 1);
+       struct net_device *dev;
 
        /* We could be called either in a RCU callback or with RTNL lock held. */
        spin_lock_bh(&mirred_list_lock);
        list_del(&m->tcfm_list);
-       spin_unlock_bh(&mirred_list_lock);
+       dev = rcu_dereference_protected(m->tcfm_dev, 1);
        if (dev)
                dev_put(dev);
+       spin_unlock_bh(&mirred_list_lock);
 }
 
 static const struct nla_policy mirred_policy[TCA_MIRRED_MAX + 1] = {
@@ -156,7 +157,6 @@ static int tcf_mirred(struct sk_buff *skb, const struct tc_action *a,
        u32 at;
 
        tcf_lastuse_update(&m->tcf_tm);
-
        bstats_cpu_update(this_cpu_ptr(m->common.cpu_bstats), skb);
 
        rcu_read_lock();
@@ -221,7 +221,7 @@ static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, i
        t.install = jiffies_to_clock_t(jiffies - m->tcf_tm.install);
        t.lastuse = jiffies_to_clock_t(jiffies - m->tcf_tm.lastuse);
        t.expires = jiffies_to_clock_t(m->tcf_tm.expires);
-       if (nla_put(skb, TCA_MIRRED_TM, sizeof(t), &t))
+       if (nla_put_64bit(skb, TCA_MIRRED_TM, sizeof(t), &t, TCA_MIRRED_PAD))
                goto nla_put_failure;
        return skb->len;