Date: Sat, 29 Sep 2012 05:52:19 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r241043 - head/sys/netinet Message-ID: <201209290552.q8T5qJor072700@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Sat Sep 29 05:52:19 2012 New Revision: 241043 URL: http://svn.freebsd.org/changeset/base/241043 Log: carp_send_ad() should never return without rescheduling next run. Modified: head/sys/netinet/ip_carp.c Modified: head/sys/netinet/ip_carp.c ============================================================================== --- head/sys/netinet/ip_carp.c Sat Sep 29 03:41:21 2012 (r241042) +++ head/sys/netinet/ip_carp.c Sat Sep 29 05:52:19 2012 (r241043) @@ -771,10 +771,7 @@ carp_send_ad_locked(struct carp_softc *s MGETHDR(m, M_NOWAIT, MT_HEADER); if (m == NULL) { CARPSTATS_INC(carps_onomem); - /* XXX maybe less ? */ - callout_reset(&sc->sc_ad_tmo, tvtohz(&tv), - carp_send_ad, sc); - return; + goto resched; } len = sizeof(*ip) + sizeof(ch); m->m_pkthdr.len = len; @@ -807,7 +804,7 @@ carp_send_ad_locked(struct carp_softc *s ch_ptr = (struct carp_header *)(&ip[1]); bcopy(&ch, ch_ptr, sizeof(ch)); if (carp_prepare_ad(m, sc, ch_ptr)) - return; + goto resched; m->m_data += sizeof(*ip); ch_ptr->carp_cksum = carp_cksum(m, len - sizeof(*ip)); @@ -842,10 +839,7 @@ carp_send_ad_locked(struct carp_softc *s MGETHDR(m, M_NOWAIT, MT_HEADER); if (m == NULL) { CARPSTATS_INC(carps_onomem); - /* XXX maybe less ? */ - callout_reset(&sc->sc_ad_tmo, tvtohz(&tv), - carp_send_ad, sc); - return; + goto resched; } len = sizeof(*ip6) + sizeof(ch); m->m_pkthdr.len = len; @@ -877,13 +871,13 @@ carp_send_ad_locked(struct carp_softc *s if (in6_setscope(&ip6->ip6_dst, sc->sc_carpdev, NULL) != 0) { m_freem(m); CARP_DEBUG("%s: in6_setscope failed\n", __func__); - return; + goto resched; } ch_ptr = (struct carp_header *)(&ip6[1]); bcopy(&ch, ch_ptr, sizeof(ch)); if (carp_prepare_ad(m, sc, ch_ptr)) - return; + goto resched; m->m_data += sizeof(*ip6); ch_ptr->carp_cksum = carp_cksum(m, len - sizeof(*ip6)); @@ -913,6 +907,7 @@ carp_send_ad_locked(struct carp_softc *s } #endif /* INET6 */ +resched: callout_reset(&sc->sc_ad_tmo, tvtohz(&tv), carp_send_ad, sc); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201209290552.q8T5qJor072700>