vxlan: Avoid unnecessary updates to FDB 'used' time
authorIdo Schimmel <idosch@nvidia.com>
Tue, 4 Feb 2025 14:55:48 +0000 (16:55 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 6 Feb 2025 02:53:57 +0000 (18:53 -0800)
Now that the VXLAN driver ages out FDB entries based on their 'updated'
time we can remove unnecessary updates of the 'used' time from the Rx
path and the control path, so that the 'used' time is only updated by
the Tx path.

Reviewed-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://patch.msgid.link/20250204145549.1216254-8-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/vxlan/vxlan_core.c

index 01797becae09b1d4ee25ed3a7da5011c2e9da66b..ece5415f9013db08b7688497f50ba7a185243146 100644 (file)
@@ -1049,10 +1049,8 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan,
                notify |= rc;
        }
 
-       if (ndm_flags & NTF_USE) {
-               WRITE_ONCE(f->used, jiffies);
+       if (ndm_flags & NTF_USE)
                WRITE_ONCE(f->updated, jiffies);
-       }
 
        if (notify) {
                if (rd == NULL)
@@ -1297,7 +1295,7 @@ int __vxlan_fdb_delete(struct vxlan_dev *vxlan,
        struct vxlan_fdb *f;
        int err = -ENOENT;
 
-       f = vxlan_find_mac(vxlan, addr, src_vni);
+       f = __vxlan_find_mac(vxlan, addr, src_vni);
        if (!f)
                return err;
 
@@ -1464,7 +1462,7 @@ static enum skb_drop_reason vxlan_snoop(struct net_device *dev,
                ifindex = src_ifindex;
 #endif
 
-       f = vxlan_find_mac(vxlan, src_mac, vni);
+       f = __vxlan_find_mac(vxlan, src_mac, vni);
        if (likely(f)) {
                struct vxlan_rdst *rdst = first_remote_rcu(f);
                unsigned long now = jiffies;
@@ -4773,7 +4771,7 @@ vxlan_fdb_offloaded_set(struct net_device *dev,
 
        spin_lock_bh(&vxlan->hash_lock[hash_index]);
 
-       f = vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni);
+       f = __vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni);
        if (!f)
                goto out;
 
@@ -4829,7 +4827,7 @@ vxlan_fdb_external_learn_del(struct net_device *dev,
        hash_index = fdb_head_index(vxlan, fdb_info->eth_addr, fdb_info->vni);
        spin_lock_bh(&vxlan->hash_lock[hash_index]);
 
-       f = vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni);
+       f = __vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni);
        if (!f)
                err = -ENOENT;
        else if (f->flags & NTF_EXT_LEARNED)