hardif_disable_interface() calls purge_orig_ref() to immediately free all neighbors associated with the interface that is going down. purge_orig_neighbors() checked if the interface status is IF_INACTIVE which is set to IF_NOT_IN_USE shortly before calling purge_orig_ref().
Signed-off-by: Marek Lindner lindner_marek@yahoo.de --- batman-adv/hard-interface.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/batman-adv/hard-interface.c b/batman-adv/hard-interface.c index 4f95777..52b2b72 100644 --- a/batman-adv/hard-interface.c +++ b/batman-adv/hard-interface.c @@ -398,7 +398,6 @@ void hardif_disable_interface(struct batman_if *batman_if)
kfree(batman_if->packet_buff); batman_if->packet_buff = NULL; - batman_if->if_status = IF_NOT_IN_USE;
/* delete all references to this batman_if */ purge_orig_ref(bat_priv); @@ -410,6 +409,7 @@ void hardif_disable_interface(struct batman_if *batman_if) softif_destroy(batman_if->soft_iface);
batman_if->soft_iface = NULL; + batman_if->if_status = IF_NOT_IN_USE; }
static struct batman_if *hardif_add_interface(struct net_device *net_dev)
hardif_disable_interface() calls purge_orig_ref() to immediately free all neighbors associated with the interface that is going down. purge_orig_neighbors() checked if the interface status is IF_INACTIVE which is set to IF_NOT_IN_USE shortly before calling purge_orig_ref().
Signed-off-by: Marek Lindner lindner_marek@yahoo.de ---
Note: The previous patch created a new problem when cleaning up pending OGMs, therefore this different approach.
batman-adv/originator.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/batman-adv/originator.c b/batman-adv/originator.c index c043bf8..1840f3a 100644 --- a/batman-adv/originator.c +++ b/batman-adv/originator.c @@ -224,10 +224,15 @@ static bool purge_orig_neighbors(struct bat_priv *bat_priv, if ((time_after(jiffies, neigh_node->last_valid + PURGE_TIMEOUT * HZ)) || (neigh_node->if_incoming->if_status == IF_INACTIVE) || + (neigh_node->if_incoming->if_status == IF_NOT_IN_USE) || (neigh_node->if_incoming->if_status == IF_TO_BE_REMOVED)) {
- if (neigh_node->if_incoming->if_status == - IF_TO_BE_REMOVED) + if ((neigh_node->if_incoming->if_status == + IF_INACTIVE) || + (neigh_node->if_incoming->if_status == + IF_NOT_IN_USE) || + (neigh_node->if_incoming->if_status == + IF_TO_BE_REMOVED)) bat_dbg(DBG_BATMAN, bat_priv, "neighbor purge: originator %pM, " "neighbor: %pM, iface: %s\n",
On Sunday 16 January 2011 11:27:52 Marek Lindner wrote:
hardif_disable_interface() calls purge_orig_ref() to immediately free all neighbors associated with the interface that is going down. purge_orig_neighbors() checked if the interface status is IF_INACTIVE which is set to IF_NOT_IN_USE shortly before calling purge_orig_ref().
Applied in revision 1903.
Regards, Marek
b.a.t.m.a.n@lists.open-mesh.org