diff options
author | Li RongQing <roy.qing.li@gmail.com> | 2014-06-18 16:07:16 +0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-06-21 15:33:22 -0700 |
commit | a3f5ee71cdec56543e0420a788dc7df335944dd5 (patch) | |
tree | 134c1fbba4689c50eb7c0cdc76961425da67836e | |
parent | 545a112bb3dcf8e4574fc985f07bf7ea03a7f809 (diff) | |
download | op-kernel-dev-a3f5ee71cdec56543e0420a788dc7df335944dd5.zip op-kernel-dev-a3f5ee71cdec56543e0420a788dc7df335944dd5.tar.gz |
bridge: use list_for_each_entry_continue_reverse
use list_for_each_entry_continue_reverse to rollback in fdb_add_hw
when add address failed
Signed-off-by: Li RongQing <roy.qing.li@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/bridge/br_fdb.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index b524c36..7be3366 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c @@ -93,7 +93,7 @@ static void fdb_rcu_free(struct rcu_head *head) static void fdb_add_hw(struct net_bridge *br, const unsigned char *addr) { int err; - struct net_bridge_port *p, *tmp; + struct net_bridge_port *p; ASSERT_RTNL(); @@ -107,11 +107,9 @@ static void fdb_add_hw(struct net_bridge *br, const unsigned char *addr) return; undo: - list_for_each_entry(tmp, &br->port_list, list) { - if (tmp == p) - break; - if (!br_promisc_port(tmp)) - dev_uc_del(tmp->dev, addr); + list_for_each_entry_continue_reverse(p, &br->port_list, list) { + if (!br_promisc_port(p)) + dev_uc_del(p->dev, addr); } } |