On Fri, 2013-05-03 at 12:01 +0800, Herbert Xu wrote:
I think I quoted the wrong hunk in the patch, I meant the code
that arms the timer should no longer be in the leave_group function
unless we just sent a query ourselves (and in that case the expiration
should also be adjusted accordingly).
Is the following patch what you meant?
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index d73276b..21fcc42 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -1302,22 +1302,6 @@ static void br_multicast_leave_group(struct
net_bridge *br,
goto out;
}
- for (p = mlock_dereference(mp->ports, br);
- p != NULL;
- p = mlock_dereference(p->next, br)) {
- if (p->port != port)
- continue;
-
- if (!hlist_unhashed(&p->mglist) &&
- (timer_pending(&p->timer) ?
- time_after(p->timer.expires, time) :
- try_to_del_timer_sync(&p->timer) >= 0)) {
- mod_timer(&p->timer, time);
- }
-
- break;
- }
-
out:
spin_unlock(&br->multicast_lock);
}