[PATCH RFC batadv v3 5/6] batman-adv: tt: decrement count for committed client on local_remove
Sven Eckelmann <[email protected]>
| Newsgroups | org.open-mesh.lists.batman |
|---|---|
| Message-ID | <[email protected]> |
Local TT entries which have the BATADV_TT_CLIENT_NEW no longer set are committed. The batadv_tt_local_size_inc() was called for them and thus the batadv_tt_local_size_dec() has to be called also when batadv_tt_local_remove() is called for them when the BATADV_TT_CLIENT_NEW wasn't consumed in the remove path. Signed-off-by: Sven Eckelmann <[email protected]> --- net/batman-adv/translation-table.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c index df99c67e..ce76d056 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c @@ -1458,6 +1458,18 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr, 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. + */ + scoped_guard(spinlock_bh, &tt_local_entry->common.flags_lock) { + if (tt_local_entry->common.flags & BATADV_TT_CLIENT_NEW) + break; + + tt_local_entry->common.flags &= ~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); -- 2.47.3