aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ipv4/inet_diag.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
index 64abe476e2a6..f50df2ed9af5 100644
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
@@ -709,19 +709,11 @@ out:
709 return err; 709 return err;
710} 710}
711 711
712static int __inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb, 712static void inet_diag_dump_icsk(struct inet_hashinfo *hashinfo, struct sk_buff *skb,
713 struct inet_diag_req *r, struct nlattr *bc) 713 struct netlink_callback *cb, struct inet_diag_req *r, struct nlattr *bc)
714{ 714{
715 int i, num; 715 int i, num;
716 int s_i, s_num; 716 int s_i, s_num;
717 const struct inet_diag_handler *handler;
718 struct inet_hashinfo *hashinfo;
719
720 handler = inet_diag_lock_handler(r->sdiag_protocol);
721 if (IS_ERR(handler))
722 goto unlock;
723
724 hashinfo = handler->idiag_hashinfo;
725 717
726 s_i = cb->args[1]; 718 s_i = cb->args[1];
727 s_num = num = cb->args[2]; 719 s_num = num = cb->args[2];
@@ -790,7 +782,7 @@ skip_listen_ht:
790 } 782 }
791 783
792 if (!(r->idiag_states & ~(TCPF_LISTEN | TCPF_SYN_RECV))) 784 if (!(r->idiag_states & ~(TCPF_LISTEN | TCPF_SYN_RECV)))
793 goto unlock; 785 goto out;
794 786
795 for (i = s_i; i <= hashinfo->ehash_mask; i++) { 787 for (i = s_i; i <= hashinfo->ehash_mask; i++) {
796 struct inet_ehash_bucket *head = &hashinfo->ehash[i]; 788 struct inet_ehash_bucket *head = &hashinfo->ehash[i];
@@ -863,8 +855,20 @@ next_dying:
863done: 855done:
864 cb->args[1] = i; 856 cb->args[1] = i;
865 cb->args[2] = num; 857 cb->args[2] = num;
866unlock: 858out:
859 ;
860}
861
862static int __inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb,
863 struct inet_diag_req *r, struct nlattr *bc)
864{
865 const struct inet_diag_handler *handler;
866
867 handler = inet_diag_lock_handler(r->sdiag_protocol);
868 if (!IS_ERR(handler))
869 inet_diag_dump_icsk(handler->idiag_hashinfo, skb, cb, r, bc);
867 inet_diag_unlock_handler(handler); 870 inet_diag_unlock_handler(handler);
871
868 return skb->len; 872 return skb->len;
869} 873}
870 874