synchronize_rcu respective synchronize_net only waits for the rcu grace period to elapse and we may fail to finish the calls which were made to call_rcu in that time. In result the module could be unloaded during the execution of the RCU callbacks.
rcu_barrier[1] will now wait for all outstanding RCU callbacks to finish before continuing.
[1] Documentation/RCU/rcubarrier.txt
Signed-off-by: Sven Eckelmann sven.eckelmann@gmx.de --- batman-adv/main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/batman-adv/main.c b/batman-adv/main.c index e8acb46..a067f75 100644 --- a/batman-adv/main.c +++ b/batman-adv/main.c @@ -74,7 +74,7 @@ static void __exit batman_exit(void) destroy_workqueue(bat_event_workqueue); bat_event_workqueue = NULL;
- synchronize_net(); + rcu_barrier(); }
int mesh_init(struct net_device *soft_iface)
On Wednesday 15 September 2010 23:09:36 Sven Eckelmann wrote:
synchronize_rcu respective synchronize_net only waits for the rcu grace period to elapse and we may fail to finish the calls which were made to call_rcu in that time. In result the module could be unloaded during the execution of the RCU callbacks.
rcu_barrier[1] will now wait for all outstanding RCU callbacks to finish before continuing.
[1] Documentation/RCU/rcubarrier.txt
Applied in revision 1794.
Thanks, Marek
b.a.t.m.a.n@lists.open-mesh.org