From f0631f1655213a3950f9955bcc532bf2facee7ec Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Fri, 30 Dec 2011 00:54:39 +0000 Subject: [PATCH] --- yaml --- r: 279147 b: refs/heads/master c: c9da99e6475f92653139e43f3c30c0cd011a0fd8 h: refs/heads/master i: 279145: e7a7f01d0e2732aa9f12f8b46d65596d6e6ef859 279143: 2990528d0d58cc6dd1f6f5d0088b5ee82ab26f37 v: v3 --- [refs] | 2 +- trunk/include/linux/unix_diag.h | 5 +++++ trunk/net/unix/diag.c | 13 ++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index ee58c38e74e8..efcc753a73b8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 885ee74d5d3058e4a904671ed7929c9540c95fa5 +refs/heads/master: c9da99e6475f92653139e43f3c30c0cd011a0fd8 diff --git a/trunk/include/linux/unix_diag.h b/trunk/include/linux/unix_diag.h index 93fdb782468a..b1d2bf16b33c 100644 --- a/trunk/include/linux/unix_diag.h +++ b/trunk/include/linux/unix_diag.h @@ -46,4 +46,9 @@ struct unix_diag_vfs { __u32 udiag_vfs_dev; }; +struct unix_diag_rqlen { + __u32 udiag_rqueue; + __u32 udiag_wqueue; +}; + #endif diff --git a/trunk/net/unix/diag.c b/trunk/net/unix/diag.c index 98945f29da4f..6b7697fd911b 100644 --- a/trunk/net/unix/diag.c +++ b/trunk/net/unix/diag.c @@ -101,7 +101,18 @@ static int sk_diag_dump_icons(struct sock *sk, struct sk_buff *nlskb) 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: