diff mbox

[BUG-FIX] udp_diag: implement idiag_get_info for udp/udplite to get queue information

Message ID 4F977A6D.1050508@gmail.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

solomon April 25, 2012, 4:15 a.m. UTC
From: Shan Wei <davidshan@tencent.com>

When we use netlink to monitor queue information for udp socket,
idiag_rqueue and idiag_wqueue of inet_diag_msg are returned with 0.

Keep consistent with netstat, just return back allocated rmem/wmem size.

Signed-off-by: Shan Wei <davidshan@tencent.com>
---
 net/ipv4/inet_diag.c |    2 +-
 net/ipv4/udp_diag.c  |    9 +++++++++
 2 files changed, 10 insertions(+), 1 deletions(-)

Comments

Pavel Emelyanov April 25, 2012, 12:28 p.m. UTC | #1
On 04/25/2012 08:15 AM, Shan Wei wrote:
> From: Shan Wei <davidshan@tencent.com>
> 
> When we use netlink to monitor queue information for udp socket,
> idiag_rqueue and idiag_wqueue of inet_diag_msg are returned with 0.
> 
> Keep consistent with netstat, just return back allocated rmem/wmem size.
> 
> Signed-off-by: Shan Wei <davidshan@tencent.com>

Acked-by: Pavel Emelyanov <xemul@parallels.com>

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller April 26, 2012, 12:46 a.m. UTC | #2
From: Pavel Emelyanov <xemul@parallels.com>
Date: Wed, 25 Apr 2012 16:28:31 +0400

> On 04/25/2012 08:15 AM, Shan Wei wrote:
>> From: Shan Wei <davidshan@tencent.com>
>> 
>> When we use netlink to monitor queue information for udp socket,
>> idiag_rqueue and idiag_wqueue of inet_diag_msg are returned with 0.
>> 
>> Keep consistent with netstat, just return back allocated rmem/wmem size.
>> 
>> Signed-off-by: Shan Wei <davidshan@tencent.com>
> 
> Acked-by: Pavel Emelyanov <xemul@parallels.com>

Applied, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
index 8d25a1c..8f8db72 100644
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
@@ -141,7 +141,7 @@  int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk,
 			goto rtattr_failure;
 
 	if (icsk == NULL) {
-		r->idiag_rqueue = r->idiag_wqueue = 0;
+		handler->idiag_get_info(sk, r, NULL);
 		goto out;
 	}
 
diff --git a/net/ipv4/udp_diag.c b/net/ipv4/udp_diag.c
index 8a949f1..a7f86a3 100644
--- a/net/ipv4/udp_diag.c
+++ b/net/ipv4/udp_diag.c
@@ -146,9 +146,17 @@  static int udp_diag_dump_one(struct sk_buff *in_skb, const struct nlmsghdr *nlh,
 	return udp_dump_one(&udp_table, in_skb, nlh, req);
 }
 
+static void udp_diag_get_info(struct sock *sk, struct inet_diag_msg *r,
+		void *info)
+{
+	r->idiag_rqueue = sk_rmem_alloc_get(sk);
+	r->idiag_wqueue = sk_wmem_alloc_get(sk);
+}
+
 static const struct inet_diag_handler udp_diag_handler = {
 	.dump		 = udp_diag_dump,
 	.dump_one	 = udp_diag_dump_one,
+	.idiag_get_info  = udp_diag_get_info,
 	.idiag_type	 = IPPROTO_UDP,
 };
 
@@ -167,6 +175,7 @@  static int udplite_diag_dump_one(struct sk_buff *in_skb, const struct nlmsghdr *
 static const struct inet_diag_handler udplite_diag_handler = {
 	.dump		 = udplite_diag_dump,
 	.dump_one	 = udplite_diag_dump_one,
+	.idiag_get_info  = udp_diag_get_info,
 	.idiag_type	 = IPPROTO_UDPLITE,
 };