Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e80c124 authored by stephen hemminger's avatar stephen hemminger Committed by David S. Miller
Browse files

bridge: simplify multicast_add_router



By coding slightly differently, there are only two cases
to deal with: add at head and add after previous entry.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent dcd79aeb
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -1039,22 +1039,25 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,
}
#endif

/*
 * Add port to rotuer_list
 *  list is maintained ordered by pointer value
 *  and locked by br->multicast_lock and RCU
 */
static void br_multicast_add_router(struct net_bridge *br,
				    struct net_bridge_port *port)
{
	struct net_bridge_port *p;
	struct hlist_node *n, *last = NULL;
	struct hlist_node *n, *slot = NULL;

	hlist_for_each_entry(p, n, &br->router_list, rlist) {
		if ((unsigned long) port >= (unsigned long) p) {
			hlist_add_before_rcu(n, &port->rlist);
			return;
		}
		last = n;
		if ((unsigned long) port >= (unsigned long) p)
			break;
		slot = n;
	}

	if (last)
		hlist_add_after_rcu(last, &port->rlist);
	if (slot)
		hlist_add_after_rcu(slot, &port->rlist);
	else
		hlist_add_head_rcu(&port->rlist, &br->router_list);
}