inet_diag: Split inet_diag_get_exact into parts
Similar to previous patch: the 1st part locks the inet handler and will get generalized and the 2nd one dumps icsk-s and will be used by TCP and DCCP handlers. Signed-off-by: Pavel Emelyanov <xemul@parallels.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									476f7dbff3
								
							
						
					
					
						commit
						efb3cb428d
					
				| @ -709,19 +709,11 @@ out: | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb, | ||||
| 		struct inet_diag_req *r, struct nlattr *bc) | ||||
| static void inet_diag_dump_icsk(struct inet_hashinfo *hashinfo, struct sk_buff *skb, | ||||
| 		struct netlink_callback *cb, struct inet_diag_req *r, struct nlattr *bc) | ||||
| { | ||||
| 	int i, num; | ||||
| 	int s_i, s_num; | ||||
| 	const struct inet_diag_handler *handler; | ||||
| 	struct inet_hashinfo *hashinfo; | ||||
| 
 | ||||
| 	handler = inet_diag_lock_handler(r->sdiag_protocol); | ||||
| 	if (IS_ERR(handler)) | ||||
| 		goto unlock; | ||||
| 
 | ||||
| 	hashinfo = handler->idiag_hashinfo; | ||||
| 
 | ||||
| 	s_i = cb->args[1]; | ||||
| 	s_num = num = cb->args[2]; | ||||
| @ -790,7 +782,7 @@ skip_listen_ht: | ||||
| 	} | ||||
| 
 | ||||
| 	if (!(r->idiag_states & ~(TCPF_LISTEN | TCPF_SYN_RECV))) | ||||
| 		goto unlock; | ||||
| 		goto out; | ||||
| 
 | ||||
| 	for (i = s_i; i <= hashinfo->ehash_mask; i++) { | ||||
| 		struct inet_ehash_bucket *head = &hashinfo->ehash[i]; | ||||
| @ -863,8 +855,20 @@ next_dying: | ||||
| done: | ||||
| 	cb->args[1] = i; | ||||
| 	cb->args[2] = num; | ||||
| unlock: | ||||
| out: | ||||
| 	; | ||||
| } | ||||
| 
 | ||||
| static int __inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb, | ||||
| 		struct inet_diag_req *r, struct nlattr *bc) | ||||
| { | ||||
| 	const struct inet_diag_handler *handler; | ||||
| 
 | ||||
| 	handler = inet_diag_lock_handler(r->sdiag_protocol); | ||||
| 	if (!IS_ERR(handler)) | ||||
| 		inet_diag_dump_icsk(handler->idiag_hashinfo, skb, cb, r, bc); | ||||
| 	inet_diag_unlock_handler(handler); | ||||
| 
 | ||||
| 	return skb->len; | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user