From: Simon Horman <horms@kernel.org>
To: n05ec@lzu.edu.cn
Cc: 'Simon Horman' <horms@kernel.org>,
b.a.t.m.a.n@lists.open-mesh.org, netdev@vger.kernel.org,
marek.lindner@mailbox.org, sw@simonwunderlich.de,
antonio@mandelbit.com, sven@narfation.org, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
yuantan098@gmail.com, yifanwucs@gmail.com,
tomapufckgml@gmail.com, bird@lzu.edu.cn,
wangjiexun2025@gmail.com
Subject: Re: [PATCH net 1/1] batman-adv: stop caching unowned originator pointers in BAT IV
Date: Wed, 6 May 2026 13:39:46 +0100 [thread overview]
Message-ID: <20260506123952.671718-3-horms@kernel.org> (raw)
In-Reply-To: <e12a51ee998808be6381780d6aaf32e093dc7d1e.1777692024.git.wangjiexun2025@gmail.com>
From: 'Simon Horman' <horms@kernel.org>
This is an AI-generated review of your patch. The human sending this
email has considered the AI review valid, or at least plausible.
Full review at: https://netdev-ai.bots.linux.dev/sashiko/
I do have concerns that this review needs to be addressed in
order for this patch to progress.
OTOH, there is another AI-generated review of this patch available at
https://sashiko.dev. In that case, I believe the review relates to
a pre-existing condition, and addressing that (or not) can be treated
as a follow-up.
---
batman-adv: stop caching unowned originator pointers in BAT IV
This patch removes the orig_node back-pointer cached inside each BAT IV
neigh_node and resolves the originator on demand via batadv_orig_hash_find()
from the stored neighbor address. Tagged Fixes: c6c8fea29769 and
Cc: stable@kernel.org.
> diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
> index f28e9cbf8ad5..168b413dd18b 100644
> --- a/net/batman-adv/bat_iv_ogm.c
> +++ b/net/batman-adv/bat_iv_ogm.c
[ ... ]
> @@ -1372,8 +1380,8 @@ batadv_iv_ogm_process_per_outif(const struct sk_buff *skb, int ogm_offset,
>
> router = batadv_orig_router_get(orig_node, if_outgoing);
> if (router) {
> - router_router = batadv_orig_router_get(router->orig_node,
> - if_outgoing);
> + router_router = batadv_orig_to_router(bat_priv, router->addr,
> + if_outgoing);
> router_ifinfo = batadv_neigh_ifinfo_get(router, if_outgoing);
> }
Is this replacement semantically equivalent to the original call?
The previous code used batadv_orig_router_get() on the cached orig_node to
fetch router_router. The new code calls batadv_orig_to_router(), which
internally runs batadv_find_router():
net/batman-adv/originator.c:batadv_orig_to_router() {
orig_node = batadv_orig_hash_find(bat_priv, orig_addr);
...
neigh_node = batadv_find_router(bat_priv, orig_node, if_outgoing);
...
}
batadv_find_router() has a bonding path that is taken when
recv_if == BATADV_IF_DEFAULT and bonding is enabled:
net/batman-adv/routing.c:batadv_find_router() {
...
if (!(recv_if == BATADV_IF_DEFAULT &&
atomic_read(&bat_priv->bonding)))
return router;
/* bonding: loop through the list of possible routers ... */
...
if (next_candidate) {
...
batadv_last_bonding_replace(orig_node, next_candidate);
} else if (first_candidate) {
...
batadv_last_bonding_replace(orig_node, first_candidate);
} else {
batadv_last_bonding_replace(orig_node, NULL);
}
...
}
batadv_iv_ogm_process() invokes batadv_iv_ogm_process_per_outif() once with
BATADV_IF_DEFAULT per received OGM:
net/batman-adv/bat_iv_ogm.c:batadv_iv_ogm_process() {
...
batadv_iv_ogm_process_per_outif(skb, ogm_offset, orig_node,
if_incoming, BATADV_IF_DEFAULT);
...
}
With bonding enabled, does every received OGM now rotate
orig_node->last_bonding_candidate on the last-hop neighbor's originator via
batadv_last_bonding_replace(), where previously that state was advanced only
from forwarding paths?
And can the bonding candidate selection return a different router_router than
batadv_orig_router_get() would have, which then feeds the subsequent
loop-avoidance check?
if (router && router_router &&
(batadv_compare_eth(router->addr, prev_sender)) &&
!(batadv_compare_eth(ogm_packet->orig, prev_sender)) &&
(batadv_compare_eth(router->addr, router_router->addr))) {
...
goto out;
}
The sister helper added by this same patch, batadv_iv_ogm_neigh_ifinfo_sum(),
uses batadv_orig_hash_find() followed by batadv_iv_orig_ifinfo_sum() rather
than batadv_orig_to_router():
> +static u8 batadv_iv_ogm_neigh_ifinfo_sum(struct batadv_priv *bat_priv,
> + const struct batadv_neigh_node *neigh_node)
> +{
> + struct batadv_orig_node *orig_neigh;
> + u8 sum;
> +
> + orig_neigh = batadv_orig_hash_find(bat_priv, neigh_node->addr);
> + if (!orig_neigh)
> + return 0;
> +
> + sum = batadv_iv_orig_ifinfo_sum(orig_neigh, neigh_node->if_incoming);
> + batadv_orig_node_put(orig_neigh);
> +
> + return sum;
> +}
Would a similar pattern work here, something like:
orig = batadv_orig_hash_find(bat_priv, router->addr);
router_router = batadv_orig_router_get(orig, if_outgoing);
batadv_orig_node_put(orig);
so that the lookup avoids invoking the bonding candidate machinery from the
OGM processing path?
The commit message describes only removing an unowned cached originator
pointer and does not mention a routing or bonding behavior change. Is the
change in router_router resolution intentional, and if so could the commit
message call it out?
prev parent reply other threads:[~2026-05-06 12:40 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1777692024.git.wangjiexun2025@gmail.com>
2026-05-03 4:28 ` [PATCH net 1/1] batman-adv: stop caching unowned originator pointers in BAT IV Ren Wei
2026-05-03 8:30 ` Sven Eckelmann
2026-05-05 18:31 ` Sven Eckelmann
2026-05-06 12:39 ` Simon Horman [this message]
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=20260506123952.671718-3-horms@kernel.org \
--to=horms@kernel.org \
--cc=antonio@mandelbit.com \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
--cc=bird@lzu.edu.cn \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=marek.lindner@mailbox.org \
--cc=n05ec@lzu.edu.cn \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sven@narfation.org \
--cc=sw@simonwunderlich.de \
--cc=tomapufckgml@gmail.com \
--cc=wangjiexun2025@gmail.com \
--cc=yifanwucs@gmail.com \
--cc=yuantan098@gmail.com \
/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