The branch main has been updated by kp:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=5ee92cbd82d0afb65bc5feabf29d8417307d38ad

commit 5ee92cbd82d0afb65bc5feabf29d8417307d38ad
Author:     Gleb Smirnoff <gleb...@freebsd.org>
AuthorDate: 2024-04-29 22:33:51 +0000
Commit:     Kristof Provost <k...@freebsd.org>
CommitDate: 2024-05-08 11:19:04 +0000

    carp: don't chain call vrrp_send_ad via carp_send_ad
    
    Provide inline send_ad_locked() that switches between protocol
    specific sending function.
    
    Rename carp_send_ad() to carp_callout() to avoid getting lost in
    all these multiple foo_send_ad.
    
    No functional change intended.
    
    Reviewed by:    kp
    Differential Revision:  https://reviews.freebsd.org/D45036
---
 sys/netinet/ip_carp.c | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c
index cf7c8d03ca73..332e76b492fa 100644
--- a/sys/netinet/ip_carp.c
+++ b/sys/netinet/ip_carp.c
@@ -350,7 +350,6 @@ static void carp_setrun(struct carp_softc *, sa_family_t);
 static void    carp_master_down(void *);
 static void    carp_master_down_locked(struct carp_softc *,
                    const char* reason);
-static void    carp_send_ad(void *);
 static void    carp_send_ad_locked(struct carp_softc *);
 static void    vrrp_send_ad_locked(struct carp_softc *);
 static void    carp_addroute(struct carp_softc *);
@@ -1087,6 +1086,19 @@ carp_prepare_ad(struct mbuf *m, struct carp_softc *sc, 
struct carp_header *ch)
        return (carp_tag(sc, m));
 }
 
+static inline void
+send_ad_locked(struct carp_softc *sc)
+{
+       switch (sc->sc_version) {
+       case CARP_VERSION_CARP:
+               carp_send_ad_locked(sc);
+               break;
+       case CARP_VERSION_VRRPv3:
+               vrrp_send_ad_locked(sc);
+               break;
+       }
+}
+
 /*
  * To avoid LORs and possible recursions this function shouldn't
  * be called directly, but scheduled via taskqueue.
@@ -1103,7 +1115,7 @@ carp_send_ad_all(void *ctx __unused, int pending __unused)
                if (sc->sc_state == MASTER) {
                        CARP_LOCK(sc);
                        CURVNET_SET(sc->sc_carpdev->if_vnet);
-                       carp_send_ad_locked(sc);
+                       send_ad_locked(sc);
                        CURVNET_RESTORE();
                        CARP_UNLOCK(sc);
                }
@@ -1113,7 +1125,7 @@ carp_send_ad_all(void *ctx __unused, int pending __unused)
 
 /* Send a periodic advertisement, executed in callout context. */
 static void
-carp_send_ad(void *v)
+carp_callout(void *v)
 {
        struct carp_softc *sc = v;
        struct epoch_tracker et;
@@ -1121,7 +1133,7 @@ carp_send_ad(void *v)
        NET_EPOCH_ENTER(et);
        CARP_LOCK_ASSERT(sc);
        CURVNET_SET(sc->sc_carpdev->if_vnet);
-       carp_send_ad_locked(sc);
+       send_ad_locked(sc);
        CURVNET_RESTORE();
        CARP_UNLOCK(sc);
        NET_EPOCH_EXIT(et);
@@ -1205,11 +1217,7 @@ carp_send_ad_locked(struct carp_softc *sc)
 
        NET_EPOCH_ASSERT();
        CARP_LOCK_ASSERT(sc);
-
-       if (sc->sc_version == CARP_VERSION_VRRPv3) {
-               vrrp_send_ad_locked(sc);
-               return;
-       }
+       MPASS(sc->sc_version == CARP_VERSION_CARP);
 
        advskew = DEMOTE_ADVSKEW(sc);
        tv.tv_sec = sc->sc_advbase;
@@ -1339,7 +1347,7 @@ carp_send_ad_locked(struct carp_softc *sc)
 #endif /* INET6 */
 
 resched:
-       callout_reset(&sc->sc_ad_tmo, tvtohz(&tv), carp_send_ad, sc);
+       callout_reset(&sc->sc_ad_tmo, tvtohz(&tv), carp_callout, sc);
 }
 
 static void
@@ -1520,7 +1528,7 @@ vrrp_send_ad_locked(struct carp_softc *sc)
 
 resched:
        callout_reset(&sc->sc_ad_tmo, sc->sc_vrrp_adv_inter * hz / 100,
-           carp_send_ad, sc);
+           carp_callout, sc);
 }
 
 static void
@@ -1760,7 +1768,7 @@ carp_master_down_locked(struct carp_softc *sc, const char 
*reason)
        switch (sc->sc_state) {
        case BACKUP:
                carp_set_state(sc, MASTER, reason);
-               carp_send_ad_locked(sc);
+               send_ad_locked(sc);
 #ifdef INET
                carp_send_arp(sc);
 #endif
@@ -1852,11 +1860,11 @@ carp_setrun(struct carp_softc *sc, sa_family_t af)
                        tv.tv_sec = sc->sc_advbase;
                        tv.tv_usec = sc->sc_advskew * 1000000 / 256;
                        callout_reset(&sc->sc_ad_tmo, tvtohz(&tv),
-                           carp_send_ad, sc);
+                           carp_callout, sc);
                } else {
                        callout_reset(&sc->sc_ad_tmo,
                            sc->sc_vrrp_adv_inter * hz / 100,
-                           carp_send_ad, sc);
+                           carp_callout, sc);
                }
                break;
        }

Reply via email to