|
@@ -501,12 +501,17 @@ batadv_neigh_node_get(const struct batadv_orig_node *orig_node,
|
|
|
static void batadv_orig_ifinfo_free_rcu(struct rcu_head *rcu)
|
|
|
{
|
|
|
struct batadv_orig_ifinfo *orig_ifinfo;
|
|
|
+ struct batadv_neigh_node *router;
|
|
|
|
|
|
orig_ifinfo = container_of(rcu, struct batadv_orig_ifinfo, rcu);
|
|
|
|
|
|
if (orig_ifinfo->if_outgoing != BATADV_IF_DEFAULT)
|
|
|
batadv_hardif_free_ref_now(orig_ifinfo->if_outgoing);
|
|
|
|
|
|
+ /* this is the last reference to this object */
|
|
|
+ router = rcu_dereference_protected(orig_ifinfo->router, true);
|
|
|
+ if (router)
|
|
|
+ batadv_neigh_node_free_ref_now(router);
|
|
|
kfree(orig_ifinfo);
|
|
|
}
|
|
|
|