diff options
author | Pavel Emelyanov <xemul@parallels.com> | 2011-12-30 00:54:39 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-12-30 16:46:02 -0500 |
commit | c9da99e6475f92653139e43f3c30c0cd011a0fd8 (patch) | |
tree | d78e4097afdcba4a3a4dd2303cc8bd475331b75a /net/unix/diag.c | |
parent | 885ee74d5d3058e4a904671ed7929c9540c95fa5 (diff) | |
download | lwn-c9da99e6475f92653139e43f3c30c0cd011a0fd8.tar.gz lwn-c9da99e6475f92653139e43f3c30c0cd011a0fd8.zip |
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.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/unix/diag.c')
-rw-r--r-- | net/unix/diag.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/net/unix/diag.c b/net/unix/diag.c index 98945f29da4f..6b7697fd911b 100644 --- a/net/unix/diag.c +++ b/net/unix/diag.c @@ -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: |