FreeBSD Bugzilla – Attachment 230207 Details for
Bug 260499
[carp] Carp unable recover after demotion by send error
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
alternative patch
carp.diff (text/plain), 1.93 KB, created by
Gleb Smirnoff
on 2021-12-17 19:40:07 UTC
(
hide
)
Description:
alternative patch
Filename:
MIME Type:
Creator:
Gleb Smirnoff
Created:
2021-12-17 19:40:07 UTC
Size:
1.93 KB
patch
obsolete
>commit 4cf9be065faf5518b0a67b9de55e447dd35299d5 >Author: Gleb Smirnoff <glebius@FreeBSD.org> >Date: Fri Dec 17 11:35:46 2021 -0800 > > carp: fix send error demotion recovery > > The problem is that carp(4) would clear the error counter on first > successful send, and stop counting successes after that. Fix this > logic and document it in human language. > > PR: 260499 > Differential revision: https://reviews.freebsd.org/D33536 > >diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c >index 7554becb974e..71558be619d8 100644 >--- a/sys/netinet/ip_carp.c >+++ b/sys/netinet/ip_carp.c >@@ -854,6 +854,13 @@ static void > carp_send_ad_error(struct carp_softc *sc, int error) > { > >+ /* >+ * We track errors and successfull sends with this logic: >+ * - Any error resets success counter to 0. >+ * - MAX_ERRORS triggers demotion. >+ * - MIN_SUCCESS successes resets error counter to 0. >+ * - MIN_SUCCESS reverts demotion, if it was triggered before. >+ */ > if (error) { > if (sc->sc_sendad_errors < INT_MAX) > sc->sc_sendad_errors++; >@@ -865,17 +872,17 @@ carp_send_ad_error(struct carp_softc *sc, int error) > carp_demote_adj(V_carp_senderr_adj, msg); > } > sc->sc_sendad_success = 0; >- } else { >- if (sc->sc_sendad_errors >= CARP_SENDAD_MAX_ERRORS && >- ++sc->sc_sendad_success >= CARP_SENDAD_MIN_SUCCESS) { >- static const char fmt[] = "send ok on %s"; >- char msg[sizeof(fmt) + IFNAMSIZ]; >- >- sprintf(msg, fmt, sc->sc_carpdev->if_xname); >- carp_demote_adj(-V_carp_senderr_adj, msg); >- sc->sc_sendad_errors = 0; >- } else >+ } else if (sc->sc_sendad_errors > 0) { >+ if (++sc->sc_sendad_success >= CARP_SENDAD_MIN_SUCCESS) { >+ if (sc->sc_sendad_errors >= CARP_SENDAD_MAX_ERRORS) { >+ static const char fmt[] = "send ok on %s"; >+ char msg[sizeof(fmt) + IFNAMSIZ]; >+ >+ sprintf(msg, fmt, sc->sc_carpdev->if_xname); >+ carp_demote_adj(-V_carp_senderr_adj, msg); >+ } > sc->sc_sendad_errors = 0; >+ } > } > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 260499
:
230203
| 230207