Commit 8d45673d authored by Ido Schimmel's avatar Ido Schimmel Committed by Paolo Abeni
Browse files

vxlan: Add a linked list of FDB entries



Currently, FDB entries are stored in a hash table with a fixed number of
buckets. The table is used for both lookups and entry traversal.
Subsequent patches will convert the table to rhashtable which is not
suitable for entry traversal.

In preparation for this conversion, add FDB entries to a linked list.
Subsequent patches will convert the driver to use this list when
traversing entries during dump, flush, etc.

Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20250415121143.345227-8-idosch@nvidia.com


Reviewed-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 094adad9
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -908,6 +908,7 @@ int vxlan_fdb_create(struct vxlan_dev *vxlan,
	++vxlan->addrcnt;
	hlist_add_head_rcu(&f->hlist,
			   vxlan_fdb_head(vxlan, mac, src_vni));
	hlist_add_head_rcu(&f->fdb_node, &vxlan->fdb_list);

	*fdb = f;

@@ -962,6 +963,7 @@ static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f,
						 swdev_notify, NULL);
	}

	hlist_del_init_rcu(&f->fdb_node);
	hlist_del_rcu(&f->hlist);
	list_del_rcu(&f->nh_list);
	call_rcu(&f->rcu, vxlan_fdb_free);
@@ -3360,6 +3362,7 @@ static void vxlan_setup(struct net_device *dev)

	for (h = 0; h < FDB_HASH_SIZE; ++h)
		INIT_HLIST_HEAD(&vxlan->fdb_head[h]);
	INIT_HLIST_HEAD(&vxlan->fdb_list);
}

static void vxlan_ether_setup(struct net_device *dev)
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ struct vxlan_fdb {
	__be32		  vni;
	u16		  flags;	/* see ndm_flags and below */
	struct list_head  nh_list;
	struct hlist_node fdb_node;
	struct nexthop __rcu *nh;
	struct vxlan_dev  __rcu *vdev;
};
+1 −0
Original line number Diff line number Diff line
@@ -307,6 +307,7 @@ struct vxlan_dev {
	struct hlist_head fdb_head[FDB_HASH_SIZE];

	struct rhashtable mdb_tbl;
	struct hlist_head fdb_list;
	struct hlist_head mdb_list;
	unsigned int mdb_seq;
};