Skip to content

Commit

Permalink
rocker: track when FDB entry is touched.
Browse files Browse the repository at this point in the history
The entry is touched once when created, and touched again for each update.
The touched time is used to calculate FDB entry age.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
Acked-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Scott Feldman authored and David S. Miller committed Sep 23, 2015
1 parent 34ea90e commit a471be4
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions drivers/net/ethernet/rocker/rocker.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ struct rocker_fdb_tbl_entry {
struct hlist_node entry;
u32 key_crc32; /* key */
bool learned;
unsigned long touched;
struct rocker_fdb_tbl_key {
u32 pport;
u8 addr[ETH_ALEN];
Expand Down Expand Up @@ -3629,6 +3630,7 @@ static int rocker_port_fdb(struct rocker_port *rocker_port,
return -ENOMEM;

fdb->learned = (flags & ROCKER_OP_FLAG_LEARNED);
fdb->touched = jiffies;
fdb->key.pport = rocker_port->pport;
ether_addr_copy(fdb->key.addr, addr);
fdb->key.vlan_id = vlan_id;
Expand All @@ -3638,13 +3640,17 @@ static int rocker_port_fdb(struct rocker_port *rocker_port,

found = rocker_fdb_tbl_find(rocker, fdb);

if (removing && found) {
rocker_port_kfree(trans, fdb);
if (trans != SWITCHDEV_TRANS_PREPARE)
hash_del(&found->entry);
} else if (!removing && !found) {
if (found) {
found->touched = jiffies;
if (removing) {
rocker_port_kfree(trans, fdb);
if (trans != SWITCHDEV_TRANS_PREPARE)
hash_del(&found->entry);
}
} else if (!removing) {
if (trans != SWITCHDEV_TRANS_PREPARE)
hash_add(rocker->fdb_tbl, &fdb->entry, fdb->key_crc32);
hash_add(rocker->fdb_tbl, &fdb->entry,
fdb->key_crc32);
}

spin_unlock_irqrestore(&rocker->fdb_tbl_lock, lock_flags);
Expand Down

0 comments on commit a471be4

Please sign in to comment.