diff options
-rw-r--r-- | drivers/staging/batman-adv/TODO | 1 | ||||
-rw-r--r-- | drivers/staging/batman-adv/hard-interface.c | 10 | ||||
-rw-r--r-- | drivers/staging/batman-adv/types.h | 1 |
3 files changed, 2 insertions, 10 deletions
diff --git a/drivers/staging/batman-adv/TODO b/drivers/staging/batman-adv/TODO index 76b2acd2da73..cb6b026333cb 100644 --- a/drivers/staging/batman-adv/TODO +++ b/drivers/staging/batman-adv/TODO @@ -1,7 +1,6 @@ * Rework usage of RCU - don't leak pointers from rcu out of rcu critical area which may get freed - - check were synchronize_rcu must be used - go through Documentation/RCU/checklist.txt * Request a new review * Process the comments from the review diff --git a/drivers/staging/batman-adv/hard-interface.c b/drivers/staging/batman-adv/hard-interface.c index 35b198c6bad5..376ac488bf51 100644 --- a/drivers/staging/batman-adv/hard-interface.c +++ b/drivers/staging/batman-adv/hard-interface.c @@ -418,13 +418,6 @@ out: return NULL; } -static void hardif_free_interface(struct rcu_head *rcu) -{ - struct batman_if *batman_if = container_of(rcu, struct batman_if, rcu); - - kfree(batman_if); -} - static void hardif_remove_interface(struct batman_if *batman_if) { /* first deactivate interface */ @@ -438,9 +431,10 @@ static void hardif_remove_interface(struct batman_if *batman_if) /* caller must take if_list_lock */ list_del_rcu(&batman_if->list); + synchronize_rcu(); sysfs_del_hardif(&batman_if->hardif_obj); dev_put(batman_if->net_dev); - call_rcu(&batman_if->rcu, hardif_free_interface); + kfree(batman_if); } void hardif_remove_interfaces(void) diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index 478277f6ad08..b16264441ea2 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -44,7 +44,6 @@ struct batman_if { unsigned char *packet_buff; int packet_len; struct kobject *hardif_obj; - struct rcu_head rcu; struct packet_type batman_adv_ptype; struct net_device *soft_iface; }; |