batman-adv: wait for call_rcu before unloading module

Message ID 1284584976-22596-1-git-send-email-sven.eckelmann@gmx.de (mailing list archive)
State Accepted, archived
Headers

Commit Message

Sven Eckelmann Sept. 15, 2010, 9:09 p.m. UTC
  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(-)
  

Comments

Marek Lindner Sept. 18, 2010, 11:11 a.m. UTC | #1
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
  

Patch

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)