svn commit: r355576 - in stable/12/sys: netinet netinet6
Hans Petter Selasky
hselasky at FreeBSD.org
Tue Dec 10 07:04:21 UTC 2019
Author: hselasky
Date: Tue Dec 10 07:04:20 2019
New Revision: 355576
URL: https://svnweb.freebsd.org/changeset/base/355576
Log:
MFC r355322:
Use refcount from "in_joingroup_locked()" when joining multicast
groups. Do not acquire additional references. This makes the IPv4 IGMP
code in line with the IPv6 MLD code.
Background:
The IPv4 multicast code puts an extra reference on the in_multi struct
when joining groups. This becomes visible when using daemons like
igmpproxy from ports, that multicast entries do not disappear from the
output of ifmcstat(8) when multicast streams are disconnected.
This fixes a regression issue after r349762.
While at it factor the ip_mfilter_insert() and ip6_mfilter_insert() calls
to avoid repeated "is_new" check.
Differential Revision: https://reviews.freebsd.org/D22595
Tested by: Guido van Rooij <guido at gvr.org>
Reviewed by: rgrimes (network)
Sponsored by: Mellanox Technologies
Modified:
stable/12/sys/netinet/in_mcast.c
stable/12/sys/netinet6/in6_mcast.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/netinet/in_mcast.c
==============================================================================
--- stable/12/sys/netinet/in_mcast.c Tue Dec 10 03:42:59 2019 (r355575)
+++ stable/12/sys/netinet/in_mcast.c Tue Dec 10 07:04:20 2019 (r355576)
@@ -2205,7 +2205,11 @@ inp_join_group(struct inpcb *inp, struct sockopt *sopt
__func__);
goto out_inp_locked;
}
- inm_acquire(imf->imf_inm);
+ /*
+ * NOTE: Refcount from in_joingroup_locked()
+ * is protecting membership.
+ */
+ ip_mfilter_insert(&imo->imo_head, imf);
} else {
CTR1(KTR_IGMPV3, "%s: merge inm state", __func__);
IN_MULTI_LIST_LOCK();
@@ -2229,8 +2233,6 @@ inp_join_group(struct inpcb *inp, struct sockopt *sopt
goto out_inp_locked;
}
}
- if (is_new)
- ip_mfilter_insert(&imo->imo_head, imf);
imf_commit(imf);
imf = NULL;
Modified: stable/12/sys/netinet6/in6_mcast.c
==============================================================================
--- stable/12/sys/netinet6/in6_mcast.c Tue Dec 10 03:42:59 2019 (r355575)
+++ stable/12/sys/netinet6/in6_mcast.c Tue Dec 10 07:04:20 2019 (r355576)
@@ -2109,6 +2109,7 @@ in6p_join_group(struct inpcb *inp, struct sockopt *sop
* NOTE: Refcount from in6_joingroup_locked()
* is protecting membership.
*/
+ ip6_mfilter_insert(&imo->im6o_head, imf);
} else {
CTR1(KTR_MLD, "%s: merge inm state", __func__);
IN6_MULTI_LIST_LOCK();
@@ -2133,9 +2134,6 @@ in6p_join_group(struct inpcb *inp, struct sockopt *sop
goto out_in6p_locked;
}
}
-
- if (is_new)
- ip6_mfilter_insert(&imo->im6o_head, imf);
im6f_commit(imf);
imf = NULL;
More information about the svn-src-stable
mailing list