On 30/07/2019 16:58, David Ahern wrote: > On 7/30/19 5:21 AM, Nikolay Aleksandrov wrote: >> diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c >> index 3d8deac2353d..f8cac3702712 100644 >> --- a/net/bridge/br_multicast.c >> +++ b/net/bridge/br_multicast.c >> @@ -1388,6 +1388,9 @@ br_multicast_leave_group(struct net_bridge *br, >> if (!br_port_group_equal(p, port, src)) >> continue; >> >> + if (p->flags & MDB_PG_FLAGS_PERMANENT) >> + break; >> + >> rcu_assign_pointer(*pp, p->next); >> hlist_del_init(&p->mglist); >> del_timer(&p->timer); > > Why 'break' and not 'continue' like you have with > if (!br_port_group_equal(p, port, src)) > Because we'll hit the goto out after this hunk always, no point in continuing if we matched a group and it's permanent, the break might as well be a goto out.