vxlan: Update vxlan fdb 'used' field after each usage
Fix some instances where vxlan fdb 'used' field is not updated after the entry is used. v2: rename vxlan_find_mac() as __vxlan_find_mac() and create a new vxlan_find_mac() that also updates ->used field. Signed-off-by: Sridhar Samudrala <sri@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
e5f5e380e0
Коммит
014be2c8ea
|
@ -301,7 +301,7 @@ static inline struct hlist_head *vxlan_fdb_head(struct vxlan_dev *vxlan,
|
|||
}
|
||||
|
||||
/* Look up Ethernet address in forwarding table */
|
||||
static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan,
|
||||
static struct vxlan_fdb *__vxlan_find_mac(struct vxlan_dev *vxlan,
|
||||
const u8 *mac)
|
||||
|
||||
{
|
||||
|
@ -316,6 +316,18 @@ static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan,
|
||||
const u8 *mac)
|
||||
{
|
||||
struct vxlan_fdb *f;
|
||||
|
||||
f = __vxlan_find_mac(vxlan, mac);
|
||||
if (f)
|
||||
f->used = jiffies;
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
/* Add/update destinations for multicast */
|
||||
static int vxlan_fdb_append(struct vxlan_fdb *f,
|
||||
__be32 ip, __be16 port, __u32 vni, __u32 ifindex)
|
||||
|
@ -353,7 +365,7 @@ static int vxlan_fdb_create(struct vxlan_dev *vxlan,
|
|||
struct vxlan_fdb *f;
|
||||
int notify = 0;
|
||||
|
||||
f = vxlan_find_mac(vxlan, mac);
|
||||
f = __vxlan_find_mac(vxlan, mac);
|
||||
if (f) {
|
||||
if (flags & NLM_F_EXCL) {
|
||||
netdev_dbg(vxlan->dev,
|
||||
|
@ -563,7 +575,6 @@ static void vxlan_snoop(struct net_device *dev,
|
|||
|
||||
f = vxlan_find_mac(vxlan, src_mac);
|
||||
if (likely(f)) {
|
||||
f->used = jiffies;
|
||||
if (likely(f->remote.remote_ip == src_ip))
|
||||
return;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче