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....@gmail.com>
---
 net/sctp/sctp_diag.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/net/sctp/sctp_diag.c b/net/sctp/sctp_diag.c
index bb2d8d9..b5269df 100644
--- a/net/sctp/sctp_diag.c
+++ b/net/sctp/sctp_diag.c
@@ -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;
-- 
2.1.0

Reply via email to