B.A.T.M.A.N Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Sven Eckelmann <sven@narfation.org>
To: b.a.t.m.a.n@lists.open-mesh.org
Cc: Sven Eckelmann <sven@narfation.org>
Subject: [PATCH batadv v5 19/20] batman-adv: tt: extract immediate purge of a local entry
Date: Sat, 29 Aug 2026 08:18:30 +0200	[thread overview]
Message-ID: <20260829-tt-fixes-v5-19-88fce8fd683d@narfation.org> (raw)
In-Reply-To: <20260829-tt-fixes-v5-0-88fce8fd683d@narfation.org>

A client which was added after the last ttvn increment was never announced
and can be dropped from the local table right away. The code doing so is
the second half of batadv_tt_local_remove() and needed a goto to skip the
accounting when the entry was already gone from the hash.

Move it to batadv_tt_local_remove_now().

Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
 net/batman-adv/translation-table.c | 57 +++++++++++++++++++++++++-------------
 1 file changed, 37 insertions(+), 20 deletions(-)

diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index 52c7cb90..fecf1930 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -1527,6 +1527,42 @@ batadv_tt_local_mark_removed(struct batadv_tt_local_entry *tt_local_entry,
 	return pending;
 }
 
+/**
+ * batadv_tt_local_remove_now() - purge a local entry which was never announced
+ * @bat_priv: the bat priv with all the mesh interface information
+ * @tt_local_entry: local TT entry to purge
+ *
+ * A client which was added right after the last ttvn increment was never sent
+ * to the other nodes. It can therefore be dropped from the local table without
+ * waiting for the next ttvn increment.
+ */
+static void
+batadv_tt_local_remove_now(struct batadv_priv *bat_priv,
+			   struct batadv_tt_local_entry *tt_local_entry)
+{
+	struct batadv_tt_common_entry *common = &tt_local_entry->common;
+	struct hlist_node *tt_removed_node;
+
+	batadv_tt_local_event(bat_priv, tt_local_entry, BATADV_TT_CLIENT_DEL);
+
+	/* remove exactly this object when still present in hash */
+	tt_removed_node = batadv_hash_remove(bat_priv->tt.local_hash,
+					     batadv_compare_tt_entry,
+					     batadv_choose_tt, common);
+	if (!tt_removed_node)
+		return;
+
+	/* batadv_tt_local_transition_new() may have committed the entry and
+	 * thus counted it in the local table size since the
+	 * BATADV_TT_CLIENT_NEW check in batadv_tt_local_mark_removed().
+	 */
+	if (!(batadv_tt_flags_get(common) & BATADV_TT_CLIENT_NEW))
+		batadv_tt_local_size_dec(bat_priv, common->vid);
+
+	/* drop reference of remove hash entry */
+	batadv_tt_local_entry_put(tt_local_entry);
+}
+
 /**
  * batadv_tt_local_remove() - logically remove an entry from the local table
  * @bat_priv: the bat priv with all the mesh interface information
@@ -1542,7 +1578,6 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr,
 			   bool roaming)
 {
 	struct batadv_tt_local_entry *tt_local_entry;
-	struct hlist_node *tt_removed_node;
 	u16 curr_flags = BATADV_NO_FLAGS;
 	bool pending = false;
 	u16 flags;
@@ -1570,25 +1605,7 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr,
 	/* if this client has been added right now, it is possible to
 	 * immediately purge it
 	 */
-	batadv_tt_local_event(bat_priv, tt_local_entry, BATADV_TT_CLIENT_DEL);
-
-	/* remove exactly this object when still present in hash */
-	tt_removed_node = batadv_hash_remove(bat_priv->tt.local_hash,
-					     batadv_compare_tt_entry,
-					     batadv_choose_tt,
-					     &tt_local_entry->common);
-	if (!tt_removed_node)
-		goto out;
-
-	/* batadv_tt_local_transition_new() may have committed the entry and
-	 * thus counted it in the local table size since the BATADV_TT_CLIENT_NEW
-	 * check above.
-	 */
-	if (!(batadv_tt_flags_get(&tt_local_entry->common) & BATADV_TT_CLIENT_NEW))
-		batadv_tt_local_size_dec(bat_priv, tt_local_entry->common.vid);
-
-	/* drop reference of remove hash entry */
-	batadv_tt_local_entry_put(tt_local_entry);
+	batadv_tt_local_remove_now(bat_priv, tt_local_entry);
 
 out:
 	batadv_tt_local_entry_put(tt_local_entry);

-- 
2.47.3


  parent reply	other threads:[~2026-08-29  6:29 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-29  6:18 [PATCH batadv v5 00/20] batman-adv: tt: atomic sashiko fixes Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 01/20] batman-adv: tt: remove only the entry which was looked up from the hash Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 02/20] batman-adv: tt: extract code handling a roam on add Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 03/20] batman-adv: tt: simplify NEW flag transition code Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 04/20] batman-adv: tt: drop unnecessary cleanup goto in helpers Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 05/20] batman-adv: tt: use protected flag modifications Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 06/20] batman-adv: tt: transition NEW local entries only under lock Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 07/20] batman-adv: tt: don't uncount never committed clients on pending purge Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 08/20] batman-adv: tt: decrement count for committed client on local_remove Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 09/20] batman-adv: tt: look up wifi state of incoming interface in helper Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 10/20] batman-adv: tt: extract allocation of new local entries Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 11/20] batman-adv: tt: replace forward gotos in batadv_tt_local_add() Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 12/20] batman-adv: tt: extract refresh of existing local entries Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 13/20] batman-adv: tt: extract update of dynamic client flags Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 14/20] batman-adv: tt: extract allocation of new global entries Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 15/20] batman-adv: tt: extract merging of flags into existing " Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 16/20] batman-adv: tt: replace add_orig_entry goto in batadv_tt_global_add() Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 17/20] batman-adv: tt: extract removal of the superseded local entry Sven Eckelmann
2026-08-29  6:18 ` [PATCH batadv v5 18/20] batman-adv: tt: extract marking of a removed " Sven Eckelmann
2026-08-29  6:18 ` Sven Eckelmann [this message]
2026-08-29  6:18 ` [PATCH batadv v5 20/20] batman-adv: tt: drop the cleanup label from batadv_tt_local_remove() 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=20260829-tt-fixes-v5-19-88fce8fd683d@narfation.org \
    --to=sven@narfation.org \
    --cc=b.a.t.m.a.n@lists.open-mesh.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox