From 0d209241b613bc31cd45fce8abd5cb2932bd7b4b Mon Sep 17 00:00:00 2001 From: Antonio Quartulli Date: Tue, 7 May 2013 01:06:18 +0200 Subject: [PATCH] --- yaml --- r: 375525 b: refs/heads/master c: a4361860351e87876aebd9595906d928ce8572c6 h: refs/heads/master i: 375523: e94e59a3507e4646fdf5897326c2da40c51eb2b9 v: v3 --- [refs] | 2 +- trunk/net/batman-adv/main.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 2d569e208758..91cc4ccd9997 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 88e48d7b3340ef07b108eb8a8b3813dd093cc7f7 +refs/heads/master: a4361860351e87876aebd9595906d928ce8572c6 diff --git a/trunk/net/batman-adv/main.c b/trunk/net/batman-adv/main.c index 9c620cd3b5f7..1240f07ad31d 100644 --- a/trunk/net/batman-adv/main.c +++ b/trunk/net/batman-adv/main.c @@ -163,14 +163,22 @@ void batadv_mesh_free(struct net_device *soft_iface) batadv_vis_quit(bat_priv); batadv_gw_node_purge(bat_priv); - batadv_originator_free(bat_priv); batadv_nc_free(bat_priv); + batadv_dat_free(bat_priv); + batadv_bla_free(bat_priv); + /* Free the TT and the originator tables only after having terminated + * all the other depending components which may use these structures for + * their purposes. + */ batadv_tt_free(bat_priv); - batadv_bla_free(bat_priv); - - batadv_dat_free(bat_priv); + /* Since the originator table clean up routine is accessing the TT + * tables as well, it has to be invoked after the TT tables have been + * freed and marked as empty. This ensures that no cleanup RCU callbacks + * accessing the TT data are scheduled for later execution. + */ + batadv_originator_free(bat_priv); free_percpu(bat_priv->bat_counters);