fib_trie: no need to delay vfree()
Now that vfree() can be called from interrupt contexts, there's no need to play games with schedule_work() to escape calling vfree() from RCU callbacks. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									b56141ab34
								
							
						
					
					
						commit
						0020356355
					
				| @ -125,7 +125,6 @@ struct tnode { | ||||
| 	unsigned int empty_children;	/* KEYLENGTH bits needed */ | ||||
| 	union { | ||||
| 		struct rcu_head rcu; | ||||
| 		struct work_struct work; | ||||
| 		struct tnode *tnode_free; | ||||
| 	}; | ||||
| 	struct rt_trie_node __rcu *child[0]; | ||||
| @ -383,12 +382,6 @@ static struct tnode *tnode_alloc(size_t size) | ||||
| 		return vzalloc(size); | ||||
| } | ||||
| 
 | ||||
| static void __tnode_vfree(struct work_struct *arg) | ||||
| { | ||||
| 	struct tnode *tn = container_of(arg, struct tnode, work); | ||||
| 	vfree(tn); | ||||
| } | ||||
| 
 | ||||
| static void __tnode_free_rcu(struct rcu_head *head) | ||||
| { | ||||
| 	struct tnode *tn = container_of(head, struct tnode, rcu); | ||||
| @ -397,10 +390,8 @@ static void __tnode_free_rcu(struct rcu_head *head) | ||||
| 
 | ||||
| 	if (size <= PAGE_SIZE) | ||||
| 		kfree(tn); | ||||
| 	else { | ||||
| 		INIT_WORK(&tn->work, __tnode_vfree); | ||||
| 		schedule_work(&tn->work); | ||||
| 	} | ||||
| 	else | ||||
| 		vfree(tn); | ||||
| } | ||||
| 
 | ||||
| static inline void tnode_free(struct tnode *tn) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user