static void br_multicast_port_group_expired(struct timer_list *t)
 {
        struct net_bridge_port_group *pg = from_timer(pg, t, timer);
+       struct net_bridge_group_src *src_ent;
        struct net_bridge *br = pg->port->br;
+       struct hlist_node *tmp;
+       bool changed;
 
        spin_lock(&br->multicast_lock);
        if (!netif_running(br->dev) || timer_pending(&pg->timer) ||
            hlist_unhashed(&pg->mglist) || pg->flags & MDB_PG_FLAGS_PERMANENT)
                goto out;
 
-       br_multicast_find_del_pg(br, pg);
+       changed = !!(pg->filter_mode == MCAST_EXCLUDE);
+       pg->filter_mode = MCAST_INCLUDE;
+       hlist_for_each_entry_safe(src_ent, tmp, &pg->src_list, node) {
+               if (!timer_pending(&src_ent->timer)) {
+                       br_multicast_del_group_src(src_ent);
+                       changed = true;
+               }
+       }
 
+       if (hlist_empty(&pg->src_list)) {
+               br_multicast_find_del_pg(br, pg);
+       } else if (changed) {
+               struct net_bridge_mdb_entry *mp = br_mdb_ip_get(br, &pg->addr);
+
+               if (WARN_ON(!mp))
+                       goto out;
+               br_mdb_notify(br->dev, mp, pg, RTM_NEWMDB);
+       }
 out:
        spin_unlock(&br->multicast_lock);
 }