diff options
| -rw-r--r-- | net/bridge/br_multicast.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 2048ef0f9be5..fcba313f1894 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c | |||
| @@ -1042,21 +1042,21 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br, | |||
| 1042 | static void br_multicast_add_router(struct net_bridge *br, | 1042 | static void br_multicast_add_router(struct net_bridge *br, |
| 1043 | struct net_bridge_port *port) | 1043 | struct net_bridge_port *port) |
| 1044 | { | 1044 | { |
| 1045 | struct hlist_node *p; | 1045 | struct net_bridge_port *p; |
| 1046 | struct hlist_node **h; | 1046 | struct hlist_node *n, *last = NULL; |
| 1047 | 1047 | ||
| 1048 | for (h = &br->router_list.first; | 1048 | hlist_for_each_entry(p, n, &br->router_list, rlist) { |
| 1049 | (p = *h) && | 1049 | if ((unsigned long) port >= (unsigned long) p) { |
| 1050 | (unsigned long)container_of(p, struct net_bridge_port, rlist) > | 1050 | hlist_add_before_rcu(n, &port->rlist); |
| 1051 | (unsigned long)port; | 1051 | return; |
| 1052 | h = &p->next) | 1052 | } |
| 1053 | ; | 1053 | last = n; |
| 1054 | 1054 | } | |
| 1055 | port->rlist.pprev = h; | 1055 | |
| 1056 | port->rlist.next = p; | 1056 | if (last) |
| 1057 | rcu_assign_pointer(*h, &port->rlist); | 1057 | hlist_add_after_rcu(last, &port->rlist); |
| 1058 | if (p) | 1058 | else |
| 1059 | p->pprev = &port->rlist.next; | 1059 | hlist_add_head_rcu(&port->rlist, &br->router_list); |
| 1060 | } | 1060 | } |
| 1061 | 1061 | ||
| 1062 | static void br_multicast_mark_router(struct net_bridge *br, | 1062 | static void br_multicast_mark_router(struct net_bridge *br, |
