X-Git-Url: https://bbs.cooldavid.org/git/?a=blobdiff_plain;f=net%2Fbridge%2Fbr_fdb.c;h=2872393b2939556d1492f195dd6e5247deafcb75;hb=b5ed54e94d324f17c97852296d61a143f01b227a;hp=90512ccfd3e973c19adade047de7eda77ffd2963;hpb=c029b55af7d6b02b993e8a5add78d062da7a3940;p=net-next-2.6.git diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index 90512ccfd3e..2872393b293 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c @@ -238,15 +238,18 @@ struct net_bridge_fdb_entry *__br_fdb_get(struct net_bridge *br, int br_fdb_test_addr(struct net_device *dev, unsigned char *addr) { struct net_bridge_fdb_entry *fdb; + struct net_bridge_port *port; int ret; - if (!br_port_exists(dev)) - return 0; - rcu_read_lock(); - fdb = __br_fdb_get(br_port_get_rcu(dev)->br, addr); - ret = fdb && fdb->dst->dev != dev && - fdb->dst->state == BR_STATE_FORWARDING; + port = br_port_get_rcu(dev); + if (!port) + ret = 0; + else { + fdb = __br_fdb_get(port->br, addr); + ret = fdb && fdb->dst->dev != dev && + fdb->dst->state == BR_STATE_FORWARDING; + } rcu_read_unlock(); return ret;