Skip to contentSkip to conversation

unix_diag: Fixup RQLEN extension report

PATCH Applied Pavel Emelyanov 2 participants 2 messages Dec 30, 2011

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 7/7 unix_diag: Fixup RQLEN extension report

While it's not too late fix the recently added RQLEN diag extension to report rqlen and wqlen in the same way as TCP does.

I.e. for listening sockets the ack backlog length (which is the input queue length for socket) in rqlen and the max ack backlog length in wqlen, and what the CINQ/OUTQ ioctls do for established.

---
 include/linux/unix_diag.h |    5 +++++
 net/unix/diag.c           |   13 ++++++++++++-
 2 files changed, 17 insertions(+), 1 deletions(-)
include/linux/unix_diag.h +5 -0
index 93fdb78..b1d2bf1 100644
@@ -46,4 +46,9 @@ struct unix_diag_vfs {
 	__u32	udiag_vfs_dev;
 };
 
+struct unix_diag_rqlen {
+	__u32	udiag_rqueue;
+	__u32	udiag_wqueue;
+};
+
 #endif
net/unix/diag.c +12 -1
index 9517bdd..9eb63a4 100644
@@ -101,7 +101,18 @@ rtattr_failure:
 
 static int sk_diag_show_rqlen(struct sock *sk, struct sk_buff *nlskb)
 {
-	RTA_PUT_U32(nlskb, UNIX_DIAG_RQLEN, sk->sk_receive_queue.qlen);
+	struct unix_diag_rqlen *rql;
+
+	rql = UNIX_DIAG_PUT(nlskb, UNIX_DIAG_RQLEN, sizeof(*rql));
+
+	if (sk->sk_state == TCP_LISTEN) {
+		rql->udiag_rqueue = sk->sk_receive_queue.qlen;
+		rql->udiag_wqueue = sk->sk_max_ack_backlog;
+	} else {
+		rql->udiag_rqueue = (__u32)unix_inq_len(sk);
+		rql->udiag_wqueue = (__u32)unix_outq_len(sk);
+	}
+
 	return 0;
 
 rtattr_failure:
Signature · 1 line
1.5.5.6
maintainer Applied
#1 lore raw

From: Pavel Emelyanov <[email protected]>
Date: Fri, 30 Dec 2011 14:54:39 +0400

Quoted 8 lines

While it's not too late fix the recently added RQLEN diag extension to report rqlen and wqlen in the same way as TCP does.

I.e. for listening sockets the ack backlog length (which is the input queue length for socket) in rqlen and the max ack backlog length in wqlen, and what the CINQ/OUTQ ioctls do for established.

Applied.