diff options
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: | |||
101 | 101 | ||
102 | static int sk_diag_show_rqlen(struct sock *sk, struct sk_buff *nlskb) | 102 | static int sk_diag_show_rqlen(struct sock *sk, struct sk_buff *nlskb) |
103 | { | 103 | { |
104 | RTA_PUT_U32(nlskb, UNIX_DIAG_RQLEN, sk->sk_receive_queue.qlen); | 104 | struct unix_diag_rqlen *rql; |
105 | |||
106 | rql = UNIX_DIAG_PUT(nlskb, UNIX_DIAG_RQLEN, sizeof(*rql)); | ||
107 | |||
108 | if (sk->sk_state == TCP_LISTEN) { | ||
109 | rql->udiag_rqueue = sk->sk_receive_queue.qlen; | ||
110 | rql->udiag_wqueue = sk->sk_max_ack_backlog; | ||
111 | } else { | ||
112 | rql->udiag_rqueue = (__u32)unix_inq_len(sk); | ||
113 | rql->udiag_wqueue = (__u32)unix_outq_len(sk); | ||
114 | } | ||
115 | |||
105 | return 0; | 116 | return 0; |
106 | 117 | ||
107 | rtattr_failure: | 118 | rtattr_failure: |