svn commit: r356240 - head/sys/netinet
Kubilay Kocak
koobs at FreeBSD.org
Wed Jan 1 02:37:51 UTC 2020
On 1/01/2020 5:58 am, Alexander Motin wrote:
> Author: mav
> Date: Tue Dec 31 18:58:29 2019
> New Revision: 356240
> URL: https://svnweb.freebsd.org/changeset/base/356240
>
> Log:
> Relax locking of carp_forus().
>
> This fixes deadlock between CARP and bridge. Bridge calls this function
> taking CARP lock while holding bridge lock. Same time CARP tries to send
> its announcements via the bridge while holding CARP lock.
>
> Use of CARP_LOCK() here does not solve anything, since sc_addr is constant
> while race on sc_state is harmless and use of the lock does not close it.
>
> Reviewed by: glebius
> MFC after: 2 weeks
> Sponsored by: iXsystems, Inc.
>
> Modified:
> head/sys/netinet/ip_carp.c
>
> Modified: head/sys/netinet/ip_carp.c
> ==============================================================================
> --- head/sys/netinet/ip_carp.c Tue Dec 31 18:28:25 2019 (r356239)
> +++ head/sys/netinet/ip_carp.c Tue Dec 31 18:58:29 2019 (r356240)
> @@ -1230,14 +1230,15 @@ carp_forus(struct ifnet *ifp, u_char *dhost)
>
> CIF_LOCK(ifp->if_carp);
> IFNET_FOREACH_CARP(ifp, sc) {
> - CARP_LOCK(sc);
> + /*
> + * CARP_LOCK() is not here, since would protect nothing, but
> + * cause deadlock with if_bridge, calling this under its lock.
> + */
> if (sc->sc_state == MASTER && !bcmp(dhost, LLADDR(&sc->sc_addr),
> ETHER_ADDR_LEN)) {
> - CARP_UNLOCK(sc);
> CIF_UNLOCK(ifp->if_carp);
> return (1);
> }
> - CARP_UNLOCK(sc);
> }
> CIF_UNLOCK(ifp->if_carp);
>
> _______________________________________________
> svn-src-head at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe at freebsd.org"
>
Hi Alexander,
Is this a only-head-impacted fix, or does the issue impact stable/12,11
too, warranting MFC ?
More information about the svn-src-all
mailing list