sctp: sctp_diag should fill RMEM_ALLOC with asoc->rmem_alloc when rcvbuf_policy is set
authorXin Long <lucien.xin@gmail.com>
Sun, 24 Apr 2016 15:21:22 +0000 (23:21 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Apr 2016 19:18:48 +0000 (15:18 -0400)
For sctp assoc, when rcvbuf_policy is set, it will has it's own
rmem_alloc, when we dump asoc info in sctp_diag, we should use that
value on RMEM_ALLOC as well, just like WMEM_ALLOC.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/sctp_diag.c

index 84829fff3bc975a142bc76f217ebd160bcb6a7a9..8e3e769dc9eafacf3d475c105ee8f39e89adcbcf 100644 (file)
@@ -145,7 +145,11 @@ static int inet_sctp_diag_fill(struct sock *sk, struct sctp_association *asoc,
                else
                        amt = sk_wmem_alloc_get(sk);
                mem[SK_MEMINFO_WMEM_ALLOC] = amt;
-               mem[SK_MEMINFO_RMEM_ALLOC] = sk_rmem_alloc_get(sk);
+               if (asoc && asoc->ep->rcvbuf_policy)
+                       amt = atomic_read(&asoc->rmem_alloc);
+               else
+                       amt = sk_rmem_alloc_get(sk);
+               mem[SK_MEMINFO_RMEM_ALLOC] = amt;
                mem[SK_MEMINFO_RCVBUF] = sk->sk_rcvbuf;
                mem[SK_MEMINFO_SNDBUF] = sk->sk_sndbuf;
                mem[SK_MEMINFO_FWD_ALLOC] = sk->sk_forward_alloc;