|
@@ -232,8 +232,7 @@ static void br_multicast_group_expired(unsigned long data)
|
|
|
if (!netif_running(br->dev) || timer_pending(&mp->timer))
|
|
|
goto out;
|
|
|
|
|
|
- if (!hlist_unhashed(&mp->mglist))
|
|
|
- hlist_del_init(&mp->mglist);
|
|
|
+ mp->mglist = false;
|
|
|
|
|
|
if (mp->ports)
|
|
|
goto out;
|
|
@@ -276,7 +275,7 @@ static void br_multicast_del_pg(struct net_bridge *br,
|
|
|
del_timer(&p->query_timer);
|
|
|
call_rcu_bh(&p->rcu, br_multicast_free_pg);
|
|
|
|
|
|
- if (!mp->ports && hlist_unhashed(&mp->mglist) &&
|
|
|
+ if (!mp->ports && !mp->mglist &&
|
|
|
netif_running(br->dev))
|
|
|
mod_timer(&mp->timer, jiffies);
|
|
|
|
|
@@ -528,7 +527,7 @@ static void br_multicast_group_query_expired(unsigned long data)
|
|
|
struct net_bridge *br = mp->br;
|
|
|
|
|
|
spin_lock(&br->multicast_lock);
|
|
|
- if (!netif_running(br->dev) || hlist_unhashed(&mp->mglist) ||
|
|
|
+ if (!netif_running(br->dev) || !mp->mglist ||
|
|
|
mp->queries_sent >= br->multicast_last_member_count)
|
|
|
goto out;
|
|
|
|
|
@@ -719,8 +718,7 @@ static int br_multicast_add_group(struct net_bridge *br,
|
|
|
goto err;
|
|
|
|
|
|
if (!port) {
|
|
|
- if (hlist_unhashed(&mp->mglist))
|
|
|
- hlist_add_head(&mp->mglist, &br->mglist);
|
|
|
+ mp->mglist = true;
|
|
|
mod_timer(&mp->timer, now + br->multicast_membership_interval);
|
|
|
goto out;
|
|
|
}
|
|
@@ -1166,7 +1164,7 @@ static int br_ip4_multicast_query(struct net_bridge *br,
|
|
|
|
|
|
max_delay *= br->multicast_last_member_count;
|
|
|
|
|
|
- if (!hlist_unhashed(&mp->mglist) &&
|
|
|
+ if (mp->mglist &&
|
|
|
(timer_pending(&mp->timer) ?
|
|
|
time_after(mp->timer.expires, now + max_delay) :
|
|
|
try_to_del_timer_sync(&mp->timer) >= 0))
|
|
@@ -1237,7 +1235,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
|
|
|
goto out;
|
|
|
|
|
|
max_delay *= br->multicast_last_member_count;
|
|
|
- if (!hlist_unhashed(&mp->mglist) &&
|
|
|
+ if (mp->mglist &&
|
|
|
(timer_pending(&mp->timer) ?
|
|
|
time_after(mp->timer.expires, now + max_delay) :
|
|
|
try_to_del_timer_sync(&mp->timer) >= 0))
|
|
@@ -1284,7 +1282,7 @@ static void br_multicast_leave_group(struct net_bridge *br,
|
|
|
br->multicast_last_member_interval;
|
|
|
|
|
|
if (!port) {
|
|
|
- if (!hlist_unhashed(&mp->mglist) &&
|
|
|
+ if (mp->mglist &&
|
|
|
(timer_pending(&mp->timer) ?
|
|
|
time_after(mp->timer.expires, time) :
|
|
|
try_to_del_timer_sync(&mp->timer) >= 0)) {
|