Re: [PATCH net-next 2/4] net: bridge: rearrange flood vs unicast receive paths
From: Cong Wang <hidden>
Date: 2016-07-15 17:35:16
Also in:
bridge
On Wed, Jul 13, 2016 at 8:10 PM, Nikolay Aleksandrov [off-list ref] wrote:
quoted hunk ↗ jump to hunk
This patch removes one conditional from the unicast path by using the fact that skb is NULL only when the packet is multicast or is local. Signed-off-by: Nikolay Aleksandrov <redacted> --- net/bridge/br_input.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-)diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 0b6d32619468..c20c5be6fc22 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c@@ -134,10 +134,10 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb struct net_bridge_port *p = br_port_get_rcu(skb->dev); const unsigned char *dest = eth_hdr(skb)->h_dest; struct net_bridge_fdb_entry *dst = NULL; + bool mcast_hit = false, unicast = true; struct net_bridge_mdb_entry *mdst; struct net_bridge *br; struct sk_buff *skb2; - bool unicast = true; u16 vid = 0; if (!p || p->state == BR_STATE_DISABLED)@@ -177,30 +177,29 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) && br_multicast_querier_exists(br, eth_hdr(skb))) { if ((mdst && mdst->mglist) || - br_multicast_is_router(br)) + br_multicast_is_router(br)) { skb2 = skb; - br_multicast_forward(mdst, skb, skb2); - skb = NULL; - if (!skb2) - goto out; + br->dev->stats.multicast++; + } + mcast_hit = true; } else { skb2 = skb; + br->dev->stats.multicast++; } unicast = false; - br->dev->stats.multicast++;
Looks like you change the unconditional increment of this counter, is this intended?