forked from mirrors/linux
		
	net_sched: move tp->root allocation into fw_init()
Cc: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									a05c2d112c
								
							
						
					
					
						commit
						33f8b9ecdb
					
				
					 1 changed files with 13 additions and 10 deletions
				
			
		|  | @ -33,6 +33,7 @@ | ||||||
| 
 | 
 | ||||||
| struct fw_head { | struct fw_head { | ||||||
| 	u32			mask; | 	u32			mask; | ||||||
|  | 	bool			mask_set; | ||||||
| 	struct fw_filter __rcu	*ht[HTSIZE]; | 	struct fw_filter __rcu	*ht[HTSIZE]; | ||||||
| 	struct rcu_head		rcu; | 	struct rcu_head		rcu; | ||||||
| }; | }; | ||||||
|  | @ -113,6 +114,14 @@ static unsigned long fw_get(struct tcf_proto *tp, u32 handle) | ||||||
| 
 | 
 | ||||||
| static int fw_init(struct tcf_proto *tp) | static int fw_init(struct tcf_proto *tp) | ||||||
| { | { | ||||||
|  | 	struct fw_head *head; | ||||||
|  | 
 | ||||||
|  | 	head = kzalloc(sizeof(struct fw_head), GFP_KERNEL); | ||||||
|  | 	if (head == NULL) | ||||||
|  | 		return -ENOBUFS; | ||||||
|  | 
 | ||||||
|  | 	head->mask_set = false; | ||||||
|  | 	rcu_assign_pointer(tp->root, head); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -286,17 +295,11 @@ static int fw_change(struct net *net, struct sk_buff *in_skb, | ||||||
| 	if (!handle) | 	if (!handle) | ||||||
| 		return -EINVAL; | 		return -EINVAL; | ||||||
| 
 | 
 | ||||||
| 	if (head == NULL) { | 	if (!head->mask_set) { | ||||||
| 		u32 mask = 0xFFFFFFFF; | 		head->mask = 0xFFFFFFFF; | ||||||
| 		if (tb[TCA_FW_MASK]) | 		if (tb[TCA_FW_MASK]) | ||||||
| 			mask = nla_get_u32(tb[TCA_FW_MASK]); | 			head->mask = nla_get_u32(tb[TCA_FW_MASK]); | ||||||
| 
 | 		head->mask_set = true; | ||||||
| 		head = kzalloc(sizeof(struct fw_head), GFP_KERNEL); |  | ||||||
| 		if (head == NULL) |  | ||||||
| 			return -ENOBUFS; |  | ||||||
| 		head->mask = mask; |  | ||||||
| 
 |  | ||||||
| 		rcu_assign_pointer(tp->root, head); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	f = kzalloc(sizeof(struct fw_filter), GFP_KERNEL); | 	f = kzalloc(sizeof(struct fw_filter), GFP_KERNEL); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 WANG Cong
						WANG Cong