On Tuesday, 19 May 2026 09:02:18 CEST Sven Eckelmann wrote: > @@ -505,6 +507,11 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, > const u8 *orig, > "%s(): not found (%pM, %d), creating new entry\n", > __func__, > orig, batadv_print_vid(vid)); > > + bla_backbone_max_learned = > READ_ONCE(bat_priv->bla_backbone_max_learned); > + bla_backbone_learned = atomic_read(&bat_priv->bla_backbone_learned); > + if (bla_backbone_max_learned && bla_backbone_learned >= > bla_backbone_max_learned) > + return NULL; > + > entry = kzalloc_obj(*entry, GFP_ATOMIC); > if (!entry) > return NULL;
@Simon: remark from Sashiko, should we actually exempt own_gateway?
@@ -508,10 +508,12 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv,
const u8 *orig,
"%s(): not found (%pM, %d), creating new entry\n", __func__,
orig, batadv_print_vid(vid));
- bla_backbone_max_learned =
READ_ONCE(bat_priv->bla_backbone_max_learned);
- bla_backbone_learned = atomic_read(&bat_priv->bla_backbone_learned);
- if (bla_backbone_max_learned && bla_backbone_learned >=
bla_backbone_max_learned)
- return NULL;
+ if (!own_backbone) {
+ bla_backbone_max_learned =
READ_ONCE(bat_priv->bla_backbone_max_learned);
+ bla_backbone_learned =
atomic_read(&bat_priv->bla_backbone_learned);
+ if (bla_backbone_max_learned && bla_backbone_learned >=
bla_backbone_max_learned)
+ return NULL;
+ }
entry = kzalloc_obj(*entry, GFP_ATOMIC);
if (!entry)
@@ -539,7 +541,10 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv,
const u8 *orig,
if (unlikely(hash_added != 0)) {
/* hash failed, free the structure */
kfree(entry);
- atomic_dec(&bat_priv->bla_backbone_learned);
+
+ if (!own_backbone)
+ atomic_dec(&bat_priv->bla_backbone_learned);
+
return NULL;
}
Regards,
Sven
signature.asc
Description: This is a digitally signed message part.
