From: Sven Eckelmann <sven@narfation.org>
To: sashiko-reviews@lists.linux.dev
Cc: antonio@mandelbit.com, marek.lindner@mailbox.org, sw@simonwunderlich.de
Subject: Re: [PATCH net-next 12/15] batman-adv: tt: use protected flag modifications
Date: Tue, 01 Sep 2026 18:55:20 +0200 [thread overview]
Message-ID: <3066909.e9J7NaK4W3@sven-desktop> (raw)
In-Reply-To: <20260901140003.62B041F000E9@smtp.kernel.org>
[-- Attachment #1: Type: text/plain, Size: 2970 bytes --]
On Tuesday, 1 September 2026 16:00:02 CEST sashiko-bot@kernel.org wrote:
[...]
> > @@ -1351,10 +1391,17 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr,
> > }
> >
> > if (!(tt_local_entry->common.flags & BATADV_TT_CLIENT_NEW)) {
> > - batadv_tt_local_set_pending(bat_priv, tt_local_entry, flags,
> > - message);
> > + tt_local_entry->common.flags |= BATADV_TT_CLIENT_PENDING;
> > + pending = true;
> > + }
> > + spin_unlock_bh(&tt_local_entry->common.flags_lock);
> > +
> > + if (pending) {
> > + batadv_tt_local_set_pending_event(bat_priv, tt_local_entry, flags,
> > + message);
>
> [Severity: High]
> Does detaching the DEL event emission from the flag update create a
> split-brain routing state?
>
> By setting the BATADV_TT_CLIENT_PENDING flag under the flags_lock but
> delaying the emission of the DEL event (via
> batadv_tt_local_set_pending_event) until after the lock is released,
> there is a window where concurrent operations can interleave.
>
> If a concurrent batadv_tt_local_add() executes within this window, it
> will clear the PENDING flag and queue an ADD event:
>
> CPU1: batadv_tt_local_remove()
> tt_local_entry->common.flags |= BATADV_TT_CLIENT_PENDING;
> spin_unlock_bh(&tt_local_entry->common.flags_lock);
> // Preempted
>
> CPU2: batadv_tt_local_add()
> tt_local->common.flags &= ~BATADV_TT_CLIENT_PENDING;
> spin_unlock_bh(&tt_local->common.flags_lock);
> batadv_tt_local_event(bat_priv, tt_local, BATADV_NO_FLAGS); // Queues ADD
>
> If the OGM worker runs now, it broadcasts the ADD.
>
> CPU1: batadv_tt_local_remove() (resumes)
> batadv_tt_local_set_pending_event(..., BATADV_TT_CLIENT_DEL, ...);
>
> The next OGM broadcasts the DEL event. The local node considers the MAC
> active (because PENDING was cleared), but the rest of the mesh drops it
> due to the DEL event, leading to persistent split-brain routing.
This is not how TT works. The events are a best effort in informing other
originators. But it is not the source of all truth.
And this is not changed by this patch.
> > @@ -1394,21 +1441,37 @@ static void batadv_tt_local_purge_list(struct batadv_priv *bat_priv,
[...]
> > - batadv_tt_local_set_pending(bat_priv, tt_local_entry,
> > - BATADV_TT_CLIENT_DEL, "timed out");
> > + batadv_tt_local_set_pending_event(bat_priv, tt_local_entry,
> > + BATADV_TT_CLIENT_DEL, "timed out");
>
> [Severity: High]
> Can this sequence similarly cause a split-brain state?
>
> Like in batadv_tt_local_remove(), this delays the DEL event emission
> until after the lock is dropped. A concurrent batadv_tt_local_add()
> could interleave during this window, resulting in the local node
> keeping the entry active while the rest of the mesh removes it.
This is not how TT works. The events are a best effort in informing other
originators. But it is not the source of all truth.
And this is not changed by this patch.
Regards,
Sven
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2026-09-01 16:55 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 13:51 [PATCH net-next 00/15] pull request for net-next: batman-adv 2026-08-31 Simon Wunderlich
2026-08-31 13:51 ` [PATCH net-next 01/15] batman-adv: dat: fix printing of unknown 4addr subtype Simon Wunderlich
2026-09-01 17:03 ` Sven Eckelmann
2026-09-04 22:51 ` patchwork-bot+netdevbpf
2026-08-31 13:51 ` [PATCH net-next 02/15] batman-adv: drop direction in _batadv_is_ap_isolated kernel-doc Simon Wunderlich
2026-08-31 13:51 ` [PATCH net-next 03/15] batman-adv: bat_v: fix bonding candidate selection Simon Wunderlich
[not found] ` <20260901135959.23F6C1F000E9@smtp.kernel.org>
2026-09-01 16:22 ` Sven Eckelmann
2026-09-01 16:58 ` Sven Eckelmann
2026-09-01 17:10 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 04/15] batman-adv: clarify cut-off in batadv_v_neigh_is_sob kernel-doc Simon Wunderlich
2026-08-31 13:51 ` [PATCH net-next 05/15] batman-adv: use more descriptive var names for is_similar_or_better Simon Wunderlich
2026-09-01 17:20 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 06/15] batman-adv: ensure u16 aligned mac address arrays on stack Simon Wunderlich
[not found] ` <20260901140000.035F51F000E9@smtp.kernel.org>
2026-09-01 16:38 ` Sven Eckelmann
2026-09-01 16:59 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 07/15] batman-adv: ensure u16 aligned mac address in structs Simon Wunderlich
2026-09-01 17:24 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 08/15] batman-adv: tt: remove only the entry which was looked up from the hash Simon Wunderlich
[not found] ` <20260901140001.59CD41F000E9@smtp.kernel.org>
2026-09-01 16:48 ` Sven Eckelmann
2026-09-01 16:59 ` Sven Eckelmann
2026-09-01 18:11 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 09/15] batman-adv: tt: extract code handling a roam on add Simon Wunderlich
[not found] ` <20260901140002.533041F000E9@smtp.kernel.org>
2026-09-01 16:51 ` Sven Eckelmann
2026-09-01 16:58 ` Sven Eckelmann
2026-09-01 18:14 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 10/15] batman-adv: tt: simplify NEW flag transition code Simon Wunderlich
2026-09-01 18:18 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 11/15] batman-adv: tt: drop unnecessary cleanup goto in helpers Simon Wunderlich
2026-08-31 13:51 ` [PATCH net-next 12/15] batman-adv: tt: use protected flag modifications Simon Wunderlich
[not found] ` <20260901140003.62B041F000E9@smtp.kernel.org>
2026-09-01 16:55 ` Sven Eckelmann [this message]
2026-09-01 16:58 ` Sven Eckelmann
2026-09-01 19:21 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 13/15] batman-adv: tt: transition NEW local entries only under lock Simon Wunderlich
2026-09-01 19:31 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 14/15] batman-adv: tt: don't uncount never committed clients on pending purge Simon Wunderlich
2026-09-01 19:33 ` Sven Eckelmann
2026-08-31 13:51 ` [PATCH net-next 15/15] batman-adv: tt: decrement count for committed client on local_remove Simon Wunderlich
2026-09-01 19:36 ` Sven Eckelmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3066909.e9J7NaK4W3@sven-desktop \
--to=sven@narfation.org \
--cc=antonio@mandelbit.com \
--cc=marek.lindner@mailbox.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=sw@simonwunderlich.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.