Staging: batman-adv: wait for call_rcu before unloading module
authorSven Eckelmann <sven.eckelmann@gmx.de>
Sat, 18 Sep 2010 19:01:14 +0000 (21:01 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 20 Sep 2010 23:29:48 +0000 (16:29 -0700)
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/batman-adv/main.c

index 78ceebf75449f61537218347d26679f935668b30..580ca02fc705007da33229fa625157d857fe14ed 100644 (file)
@@ -72,7 +72,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)