diff options
| -rw-r--r-- | net/bridge/br_fdb.c | 10 | ||||
| -rw-r--r-- | net/bridge/br_input.c | 5 | ||||
| -rw-r--r-- | net/bridge/br_private.h | 3 |
3 files changed, 10 insertions, 8 deletions
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index 70bd0bf04099..b39135285f83 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c | |||
| @@ -62,7 +62,7 @@ static inline int has_expired(const struct net_bridge *br, | |||
| 62 | const struct net_bridge_fdb_entry *fdb) | 62 | const struct net_bridge_fdb_entry *fdb) |
| 63 | { | 63 | { |
| 64 | return !fdb->is_static && | 64 | return !fdb->is_static && |
| 65 | time_before_eq(fdb->ageing_timer + hold_time(br), jiffies); | 65 | time_before_eq(fdb->updated + hold_time(br), jiffies); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | static inline int br_mac_hash(const unsigned char *mac) | 68 | static inline int br_mac_hash(const unsigned char *mac) |
| @@ -140,7 +140,7 @@ void br_fdb_cleanup(unsigned long _data) | |||
| 140 | unsigned long this_timer; | 140 | unsigned long this_timer; |
| 141 | if (f->is_static) | 141 | if (f->is_static) |
| 142 | continue; | 142 | continue; |
| 143 | this_timer = f->ageing_timer + delay; | 143 | this_timer = f->updated + delay; |
| 144 | if (time_before_eq(this_timer, jiffies)) | 144 | if (time_before_eq(this_timer, jiffies)) |
| 145 | fdb_delete(f); | 145 | fdb_delete(f); |
| 146 | else if (time_before(this_timer, next_timer)) | 146 | else if (time_before(this_timer, next_timer)) |
| @@ -293,7 +293,7 @@ int br_fdb_fillbuf(struct net_bridge *br, void *buf, | |||
| 293 | 293 | ||
| 294 | fe->is_local = f->is_local; | 294 | fe->is_local = f->is_local; |
| 295 | if (!f->is_static) | 295 | if (!f->is_static) |
| 296 | fe->ageing_timer_value = jiffies_to_clock_t(jiffies - f->ageing_timer); | 296 | fe->ageing_timer_value = jiffies_to_clock_t(jiffies - f->updated); |
| 297 | ++fe; | 297 | ++fe; |
| 298 | ++num; | 298 | ++num; |
| 299 | } | 299 | } |
| @@ -330,7 +330,7 @@ static struct net_bridge_fdb_entry *fdb_create(struct hlist_head *head, | |||
| 330 | fdb->dst = source; | 330 | fdb->dst = source; |
| 331 | fdb->is_local = 0; | 331 | fdb->is_local = 0; |
| 332 | fdb->is_static = 0; | 332 | fdb->is_static = 0; |
| 333 | fdb->ageing_timer = jiffies; | 333 | fdb->updated = fdb->used = jiffies; |
| 334 | hlist_add_head_rcu(&fdb->hlist, head); | 334 | hlist_add_head_rcu(&fdb->hlist, head); |
| 335 | } | 335 | } |
| 336 | return fdb; | 336 | return fdb; |
| @@ -404,7 +404,7 @@ void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source, | |||
| 404 | } else { | 404 | } else { |
| 405 | /* fastpath: update of existing entry */ | 405 | /* fastpath: update of existing entry */ |
| 406 | fdb->dst = source; | 406 | fdb->dst = source; |
| 407 | fdb->ageing_timer = jiffies; | 407 | fdb->updated = jiffies; |
| 408 | } | 408 | } |
| 409 | } else { | 409 | } else { |
| 410 | spin_lock(&br->hash_lock); | 410 | spin_lock(&br->hash_lock); |
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index e2160792e1bc..785932d7ad32 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c | |||
| @@ -98,9 +98,10 @@ int br_handle_frame_finish(struct sk_buff *skb) | |||
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | if (skb) { | 100 | if (skb) { |
| 101 | if (dst) | 101 | if (dst) { |
| 102 | dst->used = jiffies; | ||
| 102 | br_forward(dst->dst, skb, skb2); | 103 | br_forward(dst->dst, skb, skb2); |
| 103 | else | 104 | } else |
| 104 | br_flood_forward(br, skb, skb2); | 105 | br_flood_forward(br, skb, skb2); |
| 105 | } | 106 | } |
| 106 | 107 | ||
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index 387013d33745..a0e6b94c515b 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h | |||
| @@ -64,7 +64,8 @@ struct net_bridge_fdb_entry | |||
| 64 | struct net_bridge_port *dst; | 64 | struct net_bridge_port *dst; |
| 65 | 65 | ||
| 66 | struct rcu_head rcu; | 66 | struct rcu_head rcu; |
| 67 | unsigned long ageing_timer; | 67 | unsigned long updated; |
| 68 | unsigned long used; | ||
| 68 | mac_addr addr; | 69 | mac_addr addr; |
| 69 | unsigned char is_local; | 70 | unsigned char is_local; |
| 70 | unsigned char is_static; | 71 | unsigned char is_static; |
